Added ability to regenerate captchas.
This commit is contained in:
parent
246e011549
commit
64c138110c
|
@ -15,6 +15,9 @@ from naff import (
|
||||||
Member,
|
Member,
|
||||||
File,
|
File,
|
||||||
SlashCommandChoice,
|
SlashCommandChoice,
|
||||||
|
Button,
|
||||||
|
ButtonStyles,
|
||||||
|
Embed,
|
||||||
)
|
)
|
||||||
from naff.api import events
|
from naff.api import events
|
||||||
from naff.models.discord.enums import Permissions
|
from naff.models.discord.enums import Permissions
|
||||||
|
@ -312,6 +315,12 @@ class Gatekeep(Extension):
|
||||||
File(bio_image, file_name="captcha.png"),
|
File(bio_image, file_name="captcha.png"),
|
||||||
File(bio_audio, file_name="captcha.wav"),
|
File(bio_audio, file_name="captcha.wav"),
|
||||||
],
|
],
|
||||||
|
components=Button(
|
||||||
|
label="Regenerate",
|
||||||
|
emoji="🔃",
|
||||||
|
style=ButtonStyles.GRAY,
|
||||||
|
custom_id=f"gatekeep-captcha-regenerate:{member.id}",
|
||||||
|
),
|
||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -322,8 +331,74 @@ class Gatekeep(Extension):
|
||||||
File(bio_image, file_name="captcha.png"),
|
File(bio_image, file_name="captcha.png"),
|
||||||
File(bio_audio, file_name="captcha.wav"),
|
File(bio_audio, file_name="captcha.wav"),
|
||||||
],
|
],
|
||||||
|
components=Button(
|
||||||
|
label="Regenerate",
|
||||||
|
emoji="🔃",
|
||||||
|
style=ButtonStyles.GRAY,
|
||||||
|
custom_id=f"gatekeep-captcha-regenerate:{member.id}",
|
||||||
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@listen(events.Button)
|
||||||
|
async def on_regenerate_button(self, button: events.Button):
|
||||||
|
ctx = button.context
|
||||||
|
member = ctx.author
|
||||||
|
|
||||||
|
if (
|
||||||
|
not ctx.custom_id.startswith("gatekeep-captcha-regenerate:")
|
||||||
|
or not len(ctx.custom_id.split(":")) == 2
|
||||||
|
):
|
||||||
|
return
|
||||||
|
|
||||||
|
if ctx.author.id != int(ctx.custom_id.split(":")[1]):
|
||||||
|
await ctx.send("You are not the owner of this captcha.", ephemeral=True)
|
||||||
|
return
|
||||||
|
|
||||||
|
gkc: GatekeepCaptchasModel
|
||||||
|
gkc = GatekeepCaptchasModel.get_or_none(
|
||||||
|
guild_id=ctx.guild.id, user_id=ctx.author.id
|
||||||
|
)
|
||||||
|
|
||||||
|
if gkc is None:
|
||||||
|
await ctx.send("You have no captcha to regenerate.", ephemeral=True)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
image = ImageCaptcha(width=240, height=90)
|
||||||
|
audio = AudioCaptcha()
|
||||||
|
captcha_text = "".join([random.choice(string.digits) for _ in range(7)])
|
||||||
|
gkc.captcha = captcha_text
|
||||||
|
gkc.save()
|
||||||
|
|
||||||
|
bio_image = BytesIO()
|
||||||
|
bio_audio = BytesIO()
|
||||||
|
image.write(captcha_text, bio_image, format="png")
|
||||||
|
bio_audio.write(audio.generate(captcha_text))
|
||||||
|
bio_image.seek(0)
|
||||||
|
bio_audio.seek(0)
|
||||||
|
|
||||||
|
msg = await ctx.send(
|
||||||
|
f"The server *{member.guild.name}* requires users to complete a captcha to join.\n"
|
||||||
|
"You can complete it by sending the command `/captcha <text>` in the server",
|
||||||
|
files=[
|
||||||
|
File(bio_image, file_name="captcha.png"),
|
||||||
|
File(bio_audio, file_name="captcha.wav"),
|
||||||
|
],
|
||||||
|
components=Button(
|
||||||
|
label="Regenerate",
|
||||||
|
emoji="🔃",
|
||||||
|
style=ButtonStyles.GRAY,
|
||||||
|
custom_id=f"gatekeep-captcha-regenerate:{member.id}",
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
if msg is not None:
|
||||||
|
await ctx.message.delete()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def setup(client: Client):
|
def setup(client: Client):
|
||||||
GatekeepModel.create_table()
|
GatekeepModel.create_table()
|
||||||
|
|
Loading…
Reference in New Issue