diff --git a/bot.py b/bot.py index d00d2bd..eabfd9e 100644 --- a/bot.py +++ b/bot.py @@ -131,6 +131,15 @@ class DiscordClient(commands.Bot): traceback.print_exc() return await interaction.followup.send("Возникла необратимая ошибка, хз что случилось. Попробуй еще раз!", ephemeral=True) + async def ValidateUuidOnRegister(self, uuid): + async with aiohttp.ClientSession(cookies={"secretkey":self.secret_key}) as session: + async with session.get(f"{self.backend_url}/api/discord/validate?uuid={uuid}", ssl=False) as response: + steamIdContainer = await response.json() + if steamIdContainer is None: + return None + else: + return steamIdContainer["steam64"] + async def GetSteam64OfDiscord(self, user, no_cache = False): if user.id in self.discord2steam_cache and not no_cache: return self.discord2steam_cache[user.id] diff --git a/other_ext/register.py b/other_ext/register.py index e5c4ebe..9005a7d 100644 --- a/other_ext/register.py +++ b/other_ext/register.py @@ -5,22 +5,25 @@ import os import asyncio, aiohttp import traceback from typing import List +import uuid class Extension: auth_channel = 960796520247091201 default_role = 684828780040421388 core = None + + temporaryReg = {} + def __init__(self, core): if not os.getenv("REGISTER_ENABLED", None): return None self.core = core @core.tree.command(name = "register", description = "Привязать дискорд к стиму") @discord.app_commands.describe(profile=core.ANY_INPUT) async def register( - interaction: discord.Interaction, - profile: str + interaction: discord.Interaction ): await interaction.response.defer(thinking=True, ephemeral=True) - return await interaction.followup.send(f'Для этого перейди сюда и проделай что нужно https://tf2.pblr-nyk.pro/authentication_discord.html\nЗатем перезайди на сервер дискорда', ephemeral=True) + #return await interaction.followup.send(f'Для этого перейди сюда и проделай что нужно https://tf2.pblr-nyk.pro/authentication_discord.html\nЗатем перезайди на сервер дискорда', ephemeral=True) try: steam64 = await core.GetSteam64OfDiscord(interaction.user, True) @@ -28,31 +31,23 @@ class Extension: except: pass - try: - profile = await core.GetPlayer(profile, "", True) - except: - return await interaction.followup.send(""" -Невозможно в данный момент времени привязать такой профиль, причины: -1)Ты не играл на наших серверах, поэтому нельзя получить ид стима -2)Если ты кидал ссылку, то твоя ссылка является невалидной, попробуй другой формат -3)Сервисы стим устали -4)Сервисы факты13 устали - -Попробуй по-другому или подожди...""", ephemeral=True) - - profile_discord_id = await profile.GetDiscordId() - if profile_discord_id != 0: - return await interaction.followup.send(f'Профиль {profile.community_url} уже привязан к пользователю <@{profile_discord_id}>, если у тебя угнали профиль, напиши об этом <@142269939783434240>', ephemeral=True) - - if not profile.played_on_servers: - return await interaction.followup.send('Профиль который ты хочешь привязать не играл на наших серверах, тогда зачем ты здесь??', ephemeral=True) - - result = await profile.CreateDiscordId(interaction.user.id) - if not result: - return await interaction.followup.send('Кароч нельзя привязать профиль(((', ephemeral=True) - - await self.final_stage(interaction.user, interaction.guild) - return await interaction.followup.send(f'Ты крут!', ephemeral=True) + if not interaction.user.id in self.temporaryReg: + self.temporaryReg[interaction.user.id] = str(uuid.uuid4()) + return await interaction.followup.send(f'Для подтверждения профиля, зайди на любой из серверов фактов и напиши в чат: {self.temporaryReg[interaction.user.id]}\nЗатем повтори эту команду и бот узнает твой индификатор стим из чата', ephemeral=True) + else: + result = await core.ValidateUuidOnRegister(self.temporaryReg[interaction.user.id]) + if result: + player = await core.GetPlayer(result, result, False) + regResult = await player.CreateDiscordId(interaction.user.id) + if regResult: + await self.final_stage(interaction.user, interaction.guild, 'Зарегистрировался через бота') + del self.temporaryReg[interaction.user.id] + return await interaction.followup.send(f'Бот успешно привязал твой профиль: {player.community_url}', ephemeral=True) + else: + del self.temporaryReg[interaction.user.id] + return await interaction.followup.send(f'Ошибка регистрации, напиши админам', ephemeral=True) + else: + return await interaction.followup.send(f'Бот не увидел твоего сообщения в чате за последние 5 минут, которое состояло из {self.temporaryReg[interaction.user.id]}.\nПросто скопируй {self.temporaryReg[interaction.user.id]} и вставь в чат в игре, затем повтори у бота эту команду.', ephemeral=True) @core.tree.command(name = "unregister", description = "Отвязать профиль") @discord.app_commands.describe() @@ -83,7 +78,9 @@ class Extension: auth_channel: discord.TextChannel = await core.fetch_channel(self.auth_channel) welcome_message = f"Привет <@{member.id}>!!!\n" + """ Добро пожаловать на оффициальный сервер дискорда факты 13! -Чтоб войти и получить роль для доступа ко всему, авторизуйся через форму на сайте: https://tf2.pblr-nyk.pro/authentication_discord.html +Чтоб войти и получить роль для доступа ко всему, авторизуйся! +Либо через бота в личке, через команду: /register +Либо через через форму на сайте, через "дискорд" -> "привязать аккаунт": https://tf2.pblr-nyk.pro/authentication_discord.html Если все правильно, то этот канал для тебя исчезнет и ты получишь доступ ко всем остальным каналам. > Так-же ты можешь прочитать местные правила <#734497550232453340> Если ты их видишь))