why no work?
hisoka
python
2 years ago
8.5 kB
5
Indexable
length = 6 import asyncio import contextlib import json import logging import os import platform import random import sqlite3 import string import time import traceback from typing import Union import discord from captcha.image import ImageCaptcha from colorama import Back, Fore, Style from discord import app_commands, ui from discord.ext import commands class VerifyButton(discord.ui.View): def __init__(self): super().__init__(timeout=None) # THE VERIFY BUTTON @discord.ui.button( label="Verify", custom_id="verify_button", style=discord.ButtonStyle.red ) async def verify( self, interaction: discord.Interaction, Button: discord.ui.Button, ): # CHECK THE VERIFICATION CONFIG FILE global text # GENERATING THE CAPTCHA CODE text = "".join( random.choice( string.ascii_uppercase + string.digits + string.ascii_lowercase ) for _ in range(length) ) file_name = "".join( random.choice( string.ascii_uppercase + string.digits + string.ascii_lowercase ) for _ in range(20) ) # GENERATE THE CAPTCHA IMAGE image = ImageCaptcha(width=280, height=90) captcha = image.generate(text) image.write(text, f"captchas\\{file_name}.png") file = discord.File(f"captchas//{file_name}.png", filename="{file_name}.png") # PRINT CAPTCHA CODE INTO CONSOLE print(f"Captcha Code: {text}") # CAPTCHA EMBED captchaembed = discord.Embed( title="Verification", description=f"`{interaction.guild.name}` is using **Casualties Verification**\n to protect their server.\n\nTo proceed, press `Input Code`.\n\n**Note:** This captcha is **case-sensitive.**", color=0x000001, ) captchaembed.set_footer( text="Verification by /bran#6666", icon_url="https://i.imgur.com/4DuUUVU.png", ) captchaembed.set_image(url=f"attachment://{file_name}.png") # SEND CAPTCHA EMBED WHEN VERIFY BUTTON IS CLICKED await interaction.response.send_message( embed=captchaembed, file=file, ephemeral=True, view=InputCodeButton(), ) class InputCodeButton(discord.ui.View): def __init__(self): super().__init__(timeout=None) # THIS MUST BE IN LINE WITH THE ABOVE DEF @discord.ui.button( label="Input Code", row=0, style=discord.ButtonStyle.blurple, custom_id="InputCode", ) # SEND MODAL async def button_callback(self, interaction, button): await interaction.response.send_modal(VerifyModal()) # SHOW "INPUT CODE" BUTTON AS DISABLED class DisabledButton(discord.ui.View): def __init__(self): super().__init__(timeout=None) @discord.ui.button( label="Input Code", row=0, style=discord.ButtonStyle.gray, disabled=True, ) # THIS ISN'T ACTUALLY BEING USED! async def button_callback(self, interaction, button): await interaction.response.send_message("This is a test DisabledButton") # URL BUTTON - DISPLAYED ON VERIFICATION SUCCESS class CasualButton(discord.ui.View): def __init__(self): super().__init__() self.add_item( discord.ui.Button( label="About", url="https://casualties.io", ) ) class VerifyModal(discord.ui.Modal, title="Verification"): code = ui.TextInput( label="Captcha", placeholder="Input Captcha Code", style=discord.TextStyle.short, ) # MODAL SUBMIT WILL TRIGGER THIS async def on_submit(self, interaction: discord.Interaction): await interaction.response.edit_message(view=DisabledButton()) # SUCCESS EMBED successembed = discord.Embed( title="Verification Success!", description=f"Congrats <@{interaction.user.id}>, you're human!\n\nAccess to `{interaction.guild.name}` has been granted.", color=0x8FCE00, ) successembed.set_footer( text="Verification by /bran#6666", icon_url="https://i.imgur.com/4DuUUVU.png", ) # FAIL EMBED failembed = discord.Embed( title="Incorrect Code!", description="The code you submitted was incorrect, please try again.\n\n**Note**: This captcha is **case-sensitive.**", color=0xFF4040, ) failembed.set_footer( text="Verification by /bran#6666", icon_url="https://i.imgur.com/4DuUUVU.png", ) # ERROR EMBED errorembed = discord.Embed( title="Verification Error!", description=f"An error has occured while attempting to verify in `{interaction.guild.name}`, please try again.\n\n **Note:** Error could be caused by high volume. Please remain patient.", color=0xFFC45F, ) errorembed.set_footer( text="Verification by /bran#6666", icon_url="https://i.imgur.com/4DuUUVU.png", ) # CHECKING THE USER INPUTTED TEXT AGAINST CAPTCHA try: # IF CODE IS CORRECT if self.code.value == text: print(f"{self.verifyrole}") await interaction.member.add_roles(self.verifyrole) (" Error adding role.") await interaction.edit_original_response( embed=successembed, attachments=[], view=CasualButton(), ) print(" Correct code was submitted!") return await interaction.edit_original_response( embed=failembed, attachments=[], view=None, ) print(" Incorrect code has been submitted.") return except Exception: await interaction.edit_original_response( embed=errorembed, attachments=[], view=None, ) print(" Captcha Code on_submit error") return # VERIFY SLASH COMMAND class Verification(commands.Cog): def __init__(self, bot: commands.bot): self.bot = bot @app_commands.command(name="verification_enable", description="Verification setup.") @app_commands.describe(channel="Verification channel.", role="Verified role.") async def verifysetup( self, interaction: discord.Interaction, channel: discord.TextChannel, role: discord.Role, ): captchaembed = discord.Embed( title="Security Checkpoint", description=f"Bots are not permitted in `{interaction.guild.name}`.\n\n To prove you are human, please complete the verification process.", color=0x000001, ) captchaembed.set_footer( text="Verification by /bran#6666", icon_url="https://i.imgur.com/4DuUUVU.png", ) # SEND INITIAL VERIFICATION EMBED await interaction.channel.send( content="", embed=captchaembed, view=VerifyButton() ) await interaction.response.send_message( content=f"Verification enabled!\n\nTo *disable*, please delete the embedded message.\n\n**Setup Information:**\n> Verification Channel: {self.verifychannel}\n> Verified Role: {self.verifyrole}", ephemeral=True, ) async def cog_load(self): asyncio.create_task(self.load_my_data()) async def load_my_data(self): await self.bot.wait_until_ready() # do your assign logic self.verifyconfig = json.loads(open("cogs/verifyconfig.json", "r").read()) self.verifyguild = self.bot.get_guild(self.verifyconfig["verifyguild"]) self.verifychannel = self.bot.get_channel(self.verifyconfig["verifychannel"]) self.verifyrole = self.bot.get_role(self.verifyconfig["verifyrole"]) async def setup(bot: commands.Bot): await bot.add_cog(Verification(bot))
Editor is loading...