You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
108 lines
4.7 KiB
108 lines
4.7 KiB
import discord
|
|
import os
|
|
|
|
class Extension:
|
|
auth_channel = 960796520247091201
|
|
default_role = 684828780040421388
|
|
def __init__(self, core):
|
|
if not os.getenv("REGISTER_ENABLED", None): return None
|
|
@core.tree.command(name = "register", description = "Привязать дискорд к стиму")
|
|
@discord.app_commands.describe(profile=core.ANY_INPUT)
|
|
async def register(
|
|
interaction: discord.Interaction,
|
|
profile: str
|
|
):
|
|
await interaction.response.defer(thinking=True)
|
|
try:
|
|
steam64 = await core.GetSteam64OfDiscord(interaction.user)
|
|
return await interaction.followup.send('У тебя уже привязан профиль, стоит его для начала отвязать перед новой привязкой', ephemeral=True)
|
|
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)
|
|
|
|
result = await profile.CreateDiscordId(interaction.user.id)
|
|
if not result:
|
|
return await interaction.followup.send('Кароч нельзя привязать профиль(((', ephemeral=True)
|
|
|
|
await self.final_stage(interaction.user)
|
|
return await interaction.followup.send(f'Ты крут!', ephemeral=True)
|
|
|
|
@core.tree.command(name = "unregister", description = "Отвязать профиль")
|
|
@discord.app_commands.describe()
|
|
async def unregister(
|
|
interaction: discord.Interaction
|
|
):
|
|
await interaction.response.defer(thinking=True)
|
|
steam64 = await core.GetSteam64OfDiscord(interaction.user)
|
|
player = await core.GetPlayer(steam64, steam64, False)
|
|
await player.RemoveDiscordId(interaction.user.id)
|
|
await interaction.followup.send(f'Профиль отвязан, друг', ephemeral=True)
|
|
await self.remove_role(interaction.user.id)
|
|
return
|
|
|
|
@core.event
|
|
async def on_member_join(member):
|
|
if member.guild.id != core.main_server_id:
|
|
return
|
|
|
|
try:
|
|
core.GetSteam64OfDiscord(member, True)
|
|
self.final_stage(member)
|
|
return
|
|
except:
|
|
pass
|
|
|
|
auth_channel: discord.TextChannel = core.fetch_channel(self.auth_channel)
|
|
welcome_message = f"Привет <@{member.id}>!!!\n" + """
|
|
Добро пожаловать на оффициальный сервер дискорда факты 13!
|
|
Чтоб войти и получить роль для доступа ко всему, используй команду /register cо своим профилем стима или никнейм из тф.
|
|
Например: /register отдыхаем
|
|
|
|
Если все правильно, то этот канал для тебя исчезнет и ты получишь доступ ко всем остальным каналам.
|
|
> Так-же ты можешь прочитать местные правила <#734497550232453340> Если ты их видишь))
|
|
> Если не получается получить роль через бота пиши <@142269939783434240>"""
|
|
return await auth_channel.send(content=welcome_message, delete_after=120)
|
|
|
|
@core.event
|
|
async def on_message(message: discord.Message):
|
|
if message.guild.id != core.main_server_id:
|
|
return
|
|
|
|
if message.channel.id != self.auth_channel:
|
|
return
|
|
|
|
if message.author == core.user or message.author.id == 142269939783434240:
|
|
return
|
|
|
|
try:
|
|
await message.delete()
|
|
except Exception as err:
|
|
print(f"Cannot delete message from auth channel, error: {err}")
|
|
return
|
|
|
|
async def final_stage(self, user: discord.Member):
|
|
try:
|
|
await user.add_roles(discord.Role(id=self.default_role))
|
|
except Exception as err:
|
|
print(f"Cannot set role({self.default_role}) to {user}, error: {err}")
|
|
|
|
async def remove_role(self, user: discord.Member):
|
|
try:
|
|
await user.remove_roles(discord.Role(id=self.default_role))
|
|
except Exception as err:
|
|
print(f"Cannot remove role({self.default_role}) from {user}, error: {err}")
|