Properly handle jimmy bans

This commit is contained in:
Nexus 2023-03-17 09:25:26 +00:00
parent e3c4be4fea
commit d6f72a28b6
Signed by: nex
GPG key ID: 0FA334385D0B689F
3 changed files with 32 additions and 17 deletions

View file

@ -29,8 +29,6 @@ from selenium.webdriver.chrome.options import Options as ChromeOptions
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.firefox.options import Options as FirefoxOptions
from selenium.webdriver.firefox.service import Service as FirefoxService
from gtts import gTTS, gTTSError
# from selenium.webdriver.ie
from utils import console
@ -827,6 +825,7 @@ class OtherCog(commands.Cog):
"""Converts text to MP3. 5 uses per 10 minutes."""
speed = min(300, max(50, speed))
_bot = self.bot
class TextModal(discord.ui.Modal):
def __init__(self):
super().__init__(
@ -885,7 +884,7 @@ class OtherCog(commands.Cog):
_msg = await interaction.followup.send("Converting text to MP3...")
text_pre = self.children[0].value
try:
_io = await _bot.loop.run_in_executor(None, _convert, text_pre)
mp3 = await _bot.loop.run_in_executor(None, _convert, text_pre)
except (Exception, IOError) as e:
await _msg.edit(content="failed. " + str(e))
raise e
@ -903,7 +902,7 @@ class OtherCog(commands.Cog):
fn = fn[:28]
await _msg.edit(
content="Here's your MP3!",
file=discord.File(_io, filename=fn + ".mp3")
file=discord.File(mp3, filename=fn + ".mp3")
)
await ctx.send_modal(TextModal())

19
main.py
View file

@ -5,7 +5,7 @@ import discord
from discord.ext import commands
import config
from datetime import datetime, timezone, timedelta
from utils import console, get_or_none, JimmyBans
from utils import console, get_or_none, JimmyBans, JimmyBanException
from utils.client import bot
@ -29,6 +29,8 @@ async def on_application_command_error(ctx: discord.ApplicationContext, error: E
f"\N{warning sign} This command is already running. Please wait for it to finish.",
ephemeral=True,
)
elif isinstance(error, JimmyBanException):
return await ctx.respond(str(error))
await ctx.respond("Application Command Error: `%r`" % error)
raise error
@ -37,6 +39,8 @@ async def on_application_command_error(ctx: discord.ApplicationContext, error: E
async def on_command_error(ctx: commands.Context, error: Exception):
if isinstance(error, commands.CommandNotFound):
return
elif isinstance(error, JimmyBanException):
return await ctx.reply(str(error))
await ctx.reply("Command Error: `%r`" % error)
raise error
@ -68,7 +72,7 @@ async def ping(ctx: discord.ApplicationContext):
@bot.check_once
async def check_not_banned(ctx: discord.ApplicationContext | commands.Context):
if await bot.is_owner(ctx.author) or ctx.command.name in ("block", "unblock"):
if await bot.is_owner(ctx.author) or ctx.command.name in ("block", "unblock", "timetable", "verify", "kys"):
return True
user = ctx.author
ban: JimmyBans = await get_or_none(JimmyBans, user_id=user.id)
@ -77,16 +81,7 @@ async def check_not_banned(ctx: discord.ApplicationContext | commands.Context):
if dt < discord.utils.utcnow():
await ban.delete()
else:
reply = ctx.reply if isinstance(ctx, commands.Context) else ctx.respond
try:
await reply(
content=f":x: You can use commands {discord.utils.format_dt(dt, 'R')} (reason for ban:"
f" {ban.reason}).",
)
except discord.HTTPException:
pass
finally:
return False
raise JimmyBanException(dt, ban.reason)
return True

View file

@ -1,6 +1,7 @@
from typing import Optional
from typing import Optional, TYPE_CHECKING
from urllib.parse import urlparse
import discord
from discord.ext import commands
from ._email import *
@ -8,6 +9,26 @@ from .db import *
from .console import *
from .views import *
if TYPE_CHECKING:
from datetime import datetime
class JimmyBanException(discord.CheckFailure):
def __init__(self, until: "datetime", reason: str):
super().__init__(reason)
self.until = until
self.reason = reason
def __str__(self):
ok = discord.utils.format_dt(self.until, "R")
return (
f"\N{cross mark} You are not allowed to use commands right now. You will be unbanned {ok}.\n"
f"Ban reason:\n>>> {self.reason}"
)
def __repr__(self):
return f"<JimmyBanException until={self.until!r} reason={self.reason!r}>"
def simple_embed_paginator(
lines: list[str], *, assert_ten: bool = False, empty_is_none: bool = True, **kwargs