Здравствуйте! Помогите пожалуйста, как передать автора модального окна в modroleView для открытия базы данных SQLite? Если передаю через параметр, первые строки, которые отвечают за работу кнопок после рестарта бота - перестают работать, так как там тоже нужно передавать автора.
class modroleViewBot(commands.Bot):
def __init__(self):
super().__init__(command_prefix=commands.when_mentioned)
self.persistent_views_added = False
async def on_ready(self):
print ('bot started')
if not self.persistent_views_added:
self.add_view(modroleView())
self.persistent_views_added = True
bot = modroleViewBot()
conn = sqlite3.connect("user.db")
cursor = conn.cursor()
cursor.execute(
"""
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
nick TEXT,
rang INTEGER,
fraction TEXT,
screen TEXT
)
"""
)
conn.commit()
class role1Modal(disnake.ui.Modal):
def __init__(self):
components = [
disnake.ui.TextInput(
label="ВАШ НИК НА СЕРВЕРЕ",
placeholder="Введите Nick Name. Пример: Vladislav Nekrasov",
custom_id="nick",
style=TextInputStyle.short,
),
disnake.ui.TextInput(
label="ВАША ФРАКЦИЯ",
placeholder="Укажите фракцию. Пример: LSPD",
custom_id="fraction",
style=TextInputStyle.short,
),
disnake.ui.TextInput(
label="ВАШ РАНГ",
placeholder="Укажите ваш ранг во фракции. Пример: 5",
custom_id="rang",
style=TextInputStyle.short,
),
disnake.ui.TextInput(
label="СКРИН /MM > СТАТИСТИКА ПЕРСОНАСЖА",
placeholder="IMGUR, URL, и Т.Д",
custom_id="screen",
style=TextInputStyle.short,
),
]
super().__init__(
title=" | ЗАПРОС РОЛИ",
custom_id="create_tag",
components=components,
)
async def callback(self, interaction: disnake.ModalInteraction):
nick = interaction.text_values["nick"].title()
fraction = interaction.text_values["fraction"].upper()
rang_input = interaction.text_values["rang"]
rang = int(rang_input)
screen = interaction.text_values["screen"]
role_ids = [1239503710732812309, 1239503726218051625] #id фракционных ролей
member = interaction.user
frac_role = any(role_id in [role.id for role in member.roles] for role_id in role_ids)
role_idt = [1239524487318474782] #id роли лидера
lead_role = any(role_id in [role.id for role in member.roles] for role_id in role_idt)
if lead_role:
embed = disnake.Embed(title='Ошибка! Вы являетесь лидером!', description='', color=0xfc0000)
await interaction.response.send_message(embed=embed, ephemeral=True)
else:
if frac_role:
embed = disnake.Embed(title='Ошибка! У вас имеется одна из фракционных ролей! Для снятия роли, нажмите на кнопку "Снять роль" и повторите попытку!', description='', color=0xfc0000)
await interaction.response.send_message(embed=embed, ephemeral=True)
else:
if "https:" in screen:
if rang < 0:
embed = disnake.Embed(title='Ошибка! Вы указали не существующий ранг!', description='', color=0xfc0000)
await interaction.response.send_message(embed=embed, ephemeral=True)
else:
if "_" in nick:
embed = disnake.Embed(title='Ошибка! Вы используете "_" в нике. Укажите свой ник в формате: Nick Name!', description='', color=0xfc0000)
await interaction.response.send_message(embed=embed, ephemeral=True)
else:
if fraction.lower() in ["lvpd", "lspd", "sfpd", "мэрия", "ап", "fbi", "swat", "мчс", "армия авианосец", "зона 51", "news"]:
if fraction.lower() in ["lvpd", "lspd", "sfpd", "армия авианосец", "зона 51"] and rang > 14:
embed = disnake.Embed(title='Ошибка! Вы указываете ранг больше 14. В указанной фракции всего 14 рангов!', description='', color=0xfc0000)
await interaction.response.send_message(embed=embed, ephemeral=True)
elif fraction.lower() in ["мэрия", "ап", "fbi", "swat", "мчс"] and rang > 9:
embed = disnake.Embed(title='Ошибка! Вы указываете ранг больше 9. В указанной фракции всего 9 рангов!', description='', color=0xfc0000)
await interaction.response.send_message(embed=embed, ephemeral=True)
elif fraction.lower() in ["news"] and rang > 12:
embed = disnake.Embed(title='Ошибка! Вы указываете ранг больше 12. В указанной фракции всего 12 рангов!', description='', color=0xfc0000)
await interaction.response.send_message(embed=embed, ephemeral=True)
else:
user_id = interaction.user.id
cursor.execute("SELECT * FROM users WHERE id=?", (user_id,))
user = cursor.fetchone()
if user is None:
cursor.execute("INSERT INTO users VALUES (?, ?, ?, ?, ?)", (user_id, nick, rang, fraction, screen,))
conn.commit()
embed = disnake.Embed(title='Успешно! Ваша заявка отправлена на рассмотрение', description='', color=0x32fc00)
await interaction.response.send_message(embed=embed, ephemeral=True)
channel = bot.get_channel(1239794478919712808)#id канала куда приходят заявки
embed = disnake.Embed(title='ЗАЯВКА НА ПОЛУЧЕНИЕ РОЛИ', description=f'ОТ {member.mention}', color=0x4636ff)
embed.add_field(name=f'**Ник на сервере: {nick}**', value='', inline=False)
embed.add_field(name=f'**Фракция: {fraction}**', value='', inline=False)
embed.add_field(name=f'**Ранг {rang}**', value='', inline=False)
embed.add_field(name=f'**Ссылка на статистику /mm: {screen}**', value='', inline=False)
embed.add_field(name=f'', value='', inline=False)
embed.add_field(name=f'❗❗❗', value='', inline=False)
embed.add_field(name=f'**ВНИМАНИЕ!!! ОБЯЗАТЕЛЬНО СВЕРЯЙТЕ УКАЗАННЫЕ ДАННЫЕ СО СТАТИСТИКОЙ НА СКРИНЕ. ЕСЛИ ХОТЯБЫ 1 ДАННЫЕ НЕ СОВПАДАЮТ - ЗАЯВКА ДОЛЖНА БЫТЬ ОТКЛОНЕНА**', value='**Доп.информация:** За неверное рассмотрение заявки, администратор, который проверял заявку - получает выговор!', inline=False)
await channel.send(embed=embed, view=modroleView())
message = await channel.send('@everyone')
await asyncio.sleep(1)
await message.delete()
else:
embed = disnake.Embed(title='Ошибка! У вас уже подана заявка на роль. Дождитесь окончания проверки старой заявки', description='', color=0xfc0000)
await interaction.response.send_message(embed=embed, ephemeral=True)
else:
embed = disnake.Embed(title='Ошибка! Вы указали неверную фракцию! Список доступных фракций можете посмотреть ниже:', description='```LSPD | LVPD | SFPD | Мэрия | АП | FBI | SWAT | Зона 51 | Армия Авианосец | МЧС | News```', color=0xfc0000)
await interaction.response.send_message(embed=embed, ephemeral=True)
else:
embed = disnake.Embed(title='Ошибка! В не указали ссылку на скрин статистики /mm или она начинается не с "https:"', description='', color=0xfc0000)
await interaction.response.send_message(embed=embed, ephemeral=True)
class modroleView(disnake.ui.View):
def __init__(self):
super().__init__(timeout=None)
self.button_pressed = False
@disnake.ui.button(label='Одобрить', style=disnake.ButtonStyle.green, custom_id='but:3')
async def b3_button_callback(self, button, interaction):
if self.button_pressed == False:
user_id = #НАДО АВТОРА МОДАЛЬНОГО ОКНА
cursor.execute("SELECT * FROM users WHERE id=?", (user_id,))
user = cursor.fetchone()
if user is None:
print ('1')
else:
await interaction.author.edit(nick=f'[{user[2]}] {user[1]}')
await interaction.response.send_message(f'Получившийся ник: [{user[2]}] {user[1]}', ephemeral=True)
cursor.execute("DELETE FROM users WHERE id=?", (user_id,))
self.button_pressed = True
else:
return