157 lines
9.0 KiB
Python
157 lines
9.0 KiB
Python
|
#!/home/nonroot/discord_verification/venv/bin/python3
|
||
|
|
||
|
import discord
|
||
|
import math
|
||
|
from discord.ext import commands
|
||
|
from discord.ext.tasks import loop
|
||
|
from discord import HTTPException
|
||
|
from settings import token, get_connection_playtime, get_connection_xenforo
|
||
|
|
||
|
intents = discord.Intents.default()
|
||
|
intents.members = True
|
||
|
client = discord.Client(intents=intents)
|
||
|
|
||
|
|
||
|
def from_steam64(sid):
|
||
|
y = int(sid) - 76561197960265728
|
||
|
x = y % 2
|
||
|
return "STEAM_0:{}:{}".format(x, (y - x) // 2)
|
||
|
|
||
|
@client.event
|
||
|
async def on_message(message):
|
||
|
if message.author.bot:
|
||
|
return
|
||
|
if client.user.mentioned_in(message):
|
||
|
discord_id = message.author.id
|
||
|
target_name = message.author.name
|
||
|
for t in message.mentions:
|
||
|
if not t.bot:
|
||
|
discord_id = t.id
|
||
|
target_name = t.name
|
||
|
break
|
||
|
|
||
|
with get_connection_xenforo() as conn:
|
||
|
with conn.cursor(buffered=True) as cur: #wtf is this buffered shit even
|
||
|
sql_statement = """
|
||
|
select * from unloze_forum_2.xf_user_connected_account e
|
||
|
where e.provider_key = '%s'
|
||
|
"""
|
||
|
cur.execute(sql_statement, [discord_id])
|
||
|
res = cur.fetchone()
|
||
|
if not res:
|
||
|
await message.channel.send(f"{target_name} Your discord account is not associated to any unloze forum account. Create a forum account and associate discord")
|
||
|
else:
|
||
|
sql_statement = """
|
||
|
select * from unloze_forum_2.xf_user_connected_account e
|
||
|
where e.provider like %s and e.user_id = %s and LENGTH(e.provider_key) > 0
|
||
|
"""
|
||
|
cur.execute(sql_statement, ["%steam", res[0]])
|
||
|
res = cur.fetchone()
|
||
|
if not res:
|
||
|
await message.channel.send(f"{target_name} Your discord account is associated to an unloze forum account. But there is no steam account associated. Associate your steam account.")
|
||
|
else:
|
||
|
steam_id64 = res[2].decode("utf-8")
|
||
|
steam_id2 = from_steam64(steam_id64)
|
||
|
with get_connection_playtime() as conn2:
|
||
|
with conn2.cursor(buffered=True) as cur2:
|
||
|
sql_statement = """
|
||
|
select ze_time, mg_time, zr_time, jb_time, discord_allowed from unloze_playtimestats.player_time pt
|
||
|
where pt.steam_id = %s
|
||
|
"""
|
||
|
cur2.execute(sql_statement, [steam_id2])
|
||
|
res = cur2.fetchone()
|
||
|
if not res:
|
||
|
await message.channel.send(f"{target_name} Your steam account has no play time at all on the gameservers. You need 200 hours.")
|
||
|
else:
|
||
|
ze_time = res[0]
|
||
|
mg_time = res[1]
|
||
|
zr_time = res[2]
|
||
|
jb_time = res[3]
|
||
|
allowed = res[4]
|
||
|
if allowed:
|
||
|
await message.channel.send(f"{target_name} You are already allowed into the discord server for surpassing 200 hours game time")
|
||
|
else:
|
||
|
ze_time_hours = math.floor((ze_time / 60) / 60)
|
||
|
ze_time_minutes = math.floor((ze_time / 60) - (ze_time_hours * 60))
|
||
|
|
||
|
mg_time_hours = math.floor((mg_time / 60) / 60)
|
||
|
mg_time_minutes = math.floor((mg_time / 60) - (mg_time_hours * 60))
|
||
|
|
||
|
zr_time_hours = math.floor((zr_time / 60) / 60)
|
||
|
zr_time_minutes = math.floor((zr_time / 60) - (zr_time_hours * 60))
|
||
|
|
||
|
jb_time_hours = math.floor((jb_time / 60) / 60)
|
||
|
jb_time_minutes = math.floor((jb_time / 60) - (jb_time_hours * 60))
|
||
|
|
||
|
total_time_hours = ze_time_hours + mg_time_hours + zr_time_hours + jb_time_hours
|
||
|
total_time_minutes = ze_time_minutes + mg_time_minutes + zr_time_minutes + jb_time_minutes
|
||
|
extra_hour = math.floor(total_time_minutes / 60)
|
||
|
if extra_hour > 0:
|
||
|
total_time_hours += extra_hour
|
||
|
total_time_minutes = math.floor(total_time_minutes - (extra_hour * 60))
|
||
|
|
||
|
await message.channel.send(f"Player: {target_name} \nZE playtime: {ze_time_hours} hours {ze_time_minutes} minutes.\nMG playtime: {mg_time_hours} hours {mg_time_minutes} minutes.\nZR playtime: {zr_time_hours} hours {zr_time_minutes} minutes.\nJB playtime: {jb_time_hours} hours {jb_time_minutes} minutes. \n\nYou need a total of 200 hours gametime for being allowed into the discord automatically: \nTotal Playtime: {total_time_hours} hours {total_time_minutes} minutes.")
|
||
|
|
||
|
@loop(seconds = 10)
|
||
|
async def check_person_to_allow():
|
||
|
global client
|
||
|
d = client
|
||
|
with get_connection_xenforo() as conn:
|
||
|
with conn.cursor(buffered=True) as cur: #wtf is this buffered shit even
|
||
|
for channel in d.get_all_channels():
|
||
|
if channel.name == 'introduction-channel':
|
||
|
for member in channel.members:
|
||
|
discord_id = member.id
|
||
|
sql_statement = """
|
||
|
select * from unloze_forum_2.xf_user_connected_account e
|
||
|
where e.provider_key = '%s'
|
||
|
"""
|
||
|
cur.execute(sql_statement, [discord_id])
|
||
|
res = cur.fetchone()
|
||
|
if res:
|
||
|
sql_statement = """
|
||
|
select * from unloze_forum_2.xf_user_connected_account e
|
||
|
where e.provider like %s and e.user_id = %s and LENGTH(e.provider_key) > 0
|
||
|
"""
|
||
|
cur.execute(sql_statement, ["%steam", res[0]])
|
||
|
res = cur.fetchone()
|
||
|
if res:
|
||
|
steam_id64 = res[2].decode("utf-8")
|
||
|
steam_id2 = from_steam64(steam_id64)
|
||
|
with get_connection_playtime() as conn2:
|
||
|
with conn2.cursor(buffered=True) as cur2:
|
||
|
sql_statement = """
|
||
|
select ze_time, mg_time, zr_time, jb_time from unloze_playtimestats.player_time pt
|
||
|
where pt.steam_id = %s and discord_allowed = 0
|
||
|
"""
|
||
|
cur2.execute(sql_statement, [steam_id2])
|
||
|
res = cur2.fetchone()
|
||
|
if res:
|
||
|
ze_time = res[0]
|
||
|
mg_time = res[1]
|
||
|
zr_time = res[2]
|
||
|
jb_time = res[3]
|
||
|
ze_time = (ze_time / 60) / 60
|
||
|
mg_time = (mg_time / 60) / 60
|
||
|
zr_time = (zr_time / 60) / 60
|
||
|
jb_time = (jb_time / 60) / 60
|
||
|
total_time = ze_time + mg_time + zr_time + jb_time
|
||
|
if total_time > 200.0:
|
||
|
sql_statement = """
|
||
|
update unloze_playtimestats.player_time
|
||
|
set discord_allowed = 1 where steam_id = %s
|
||
|
"""
|
||
|
cur.execute(sql_statement, [steam_id2])
|
||
|
for channel1 in d.get_all_channels():
|
||
|
if channel1.name == 'logs-discord-allowed':
|
||
|
await channel1.send(f"Allowed SteamID {steam_id2} into the discord server using the discord ID: {discord_id} and name {member.name}. Descriminator ID: {member.discriminator}")
|
||
|
member.remove_roles("new-comer")
|
||
|
break
|
||
|
|
||
|
def main():
|
||
|
check_person_to_allow.start()
|
||
|
client.run(token)
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
main()
|