import discord
from discord.ext import commands, tasks
import json
import sqlite3
from discord.ui import Button, View, Modal, InputText
class Verif(Modal): # делаем класс для отправки модального меню, также вам прийдется создать папку jsons и вставить туда файлы users.json и passw.json
def __init__(self, bot) -> None:
self.bot = bot
super().__init__(title="Подтвердить действие")
self.add_item(
InputText(
label="Ваш id:",
placeholder="123456789101112131",
min_length = 18,
max_length = 18,
style=discord.InputTextStyle.singleline
)
)
self.add_item(
InputText(
label="Ваш капча-код из Л/С:",
placeholder="123456789",
min_length = 6,
max_length = 6,
style=discord.InputTextStyle.singleline
)
)
async def callback(self, interaction: discord.Interaction):
short = self.children[1].value
short1 = self.children[0].value
cc = load_json("jsons/passw.json")
captcha_code = cc[str(interaction.user.id)]
if short == captcha_code and interaction.user.id == int(short1):
await interaction.response.send_message(f'Спасибо, Вы успешно прошли капчу! Добро пожаловать, {interaction.user.name}!', ephemeral=True)
cc = load_json("jsons/passw.json")
status = 'verified'
cc[str(interaction.user.id)] = str(status)
write_json("jsons/passw.json", cc)
verify = discord.utils.get(interaction.user.guild.roles, name='verify') # сюда название своей роли
await interaction.user.add_roles( verify )
channel = self.bot.get_channel(986647044116611132)
await channel.send(f'{interaction.user} прошел верефикацию')
else:
await interaction.response.send_message(f"Упс... Вы не прошли капчу, Вы кикнуты!", ephemeral=True)
await interaction.user.send(f'Уважаемый пользователь! Вы были кикнуты с сервера, т.к. Вы не прошли капчу.')
await interaction.user.kick(reason='Данный пользователь не прошёл капчу (проверку).')
channel = self.bot.get_channel(986647044116611132)
await channel.send(f'{interaction.user} не прошел верефикацию')
class Myview(discord.ui.View): # далее делаем класс с бесконечной кнопкой
def __init__(self, bot):
self.bot = bot
super().__init__(timeout=None)
@discord.ui.button(label="ПОДТВЕРДИТЬ", style=discord.ButtonStyle.primary, emoji = '<:735015302794051665:853212498671960074> ', custom_id='button') # эмодзи замените на свое т.к. кнопка может не работать
async def button_callback(self, button, interaction):
base.execute('CREATE TABLE IF NOT EXISTS verify(userid INT, status TEXT)')
base.commit()
verify = cur.execute(f'SELECT userid FROM verify WHERE userid == {interaction.user.id}').fetchone()
if verify == None:
cur.execute(f"INSERT INTO verify VALUES (?, ?)", [interaction.user.id, 'click'])
base.commit()
cc = load_json("jsons/passw.json")
captcha_code = cc[str(interaction.user.id)]
await interaction.response.send_message(f'Здравствуйте, ваш код: ||{captcha_code}||\nВы его должны ввести прямо сейчас, нажав на кнопку еще раз.', ephemeral=True)
else:
modal = Verif(self.bot)
await interaction.response.send_modal(modal)
class Moderation(commands.Cog): # запускаем сам ког
def __init__(self, bot):
self.bot: commands.Bot = bot
print('Module {} is loaded'.format(self.__class__.__name__))
@commands.command()
@commands.has_permissions(administrator=True)
async def verif(self, ctx):
emb = discord.Embed( title = 'Верефицироваться', description = f'Нажимая на данныю кнопку вы подтвержаете что ознакомлены со всеми правилами', colour = discord.Color.blue() )
await ctx.send(embed=emb, view=Myview(self.bot))
@commands.Cog.listener()
async def on_ready(self):
global base, cur
base = sqlite3.connect('cogs/Warn.db')
cur = base.cursor()
if base:
print('Database подключен')
for guild in self.bot.guilds:
#try:
self.bot.add_view(Myview(self.bot)) # комменты не убираем выше и нижу они нужны
#except TypeError:
#continue
def setup(client):
client.add_cog(Moderation(client))