mirror of
https://github.com/nexy7574/LCC-bot.git
synced 2024-09-19 18:16:34 +01:00
Properly handle jimmy bans
This commit is contained in:
parent
e3c4be4fea
commit
1ed5c739f2
3 changed files with 32 additions and 17 deletions
|
@ -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
19
main.py
|
@ -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.respond(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
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue