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
d6f72a28b6
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.chrome.service import Service as ChromeService
|
||||||
from selenium.webdriver.firefox.options import Options as FirefoxOptions
|
from selenium.webdriver.firefox.options import Options as FirefoxOptions
|
||||||
from selenium.webdriver.firefox.service import Service as FirefoxService
|
from selenium.webdriver.firefox.service import Service as FirefoxService
|
||||||
from gtts import gTTS, gTTSError
|
|
||||||
|
|
||||||
# from selenium.webdriver.ie
|
# from selenium.webdriver.ie
|
||||||
|
|
||||||
from utils import console
|
from utils import console
|
||||||
|
@ -827,6 +825,7 @@ class OtherCog(commands.Cog):
|
||||||
"""Converts text to MP3. 5 uses per 10 minutes."""
|
"""Converts text to MP3. 5 uses per 10 minutes."""
|
||||||
speed = min(300, max(50, speed))
|
speed = min(300, max(50, speed))
|
||||||
_bot = self.bot
|
_bot = self.bot
|
||||||
|
|
||||||
class TextModal(discord.ui.Modal):
|
class TextModal(discord.ui.Modal):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__(
|
super().__init__(
|
||||||
|
@ -885,7 +884,7 @@ class OtherCog(commands.Cog):
|
||||||
_msg = await interaction.followup.send("Converting text to MP3...")
|
_msg = await interaction.followup.send("Converting text to MP3...")
|
||||||
text_pre = self.children[0].value
|
text_pre = self.children[0].value
|
||||||
try:
|
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:
|
except (Exception, IOError) as e:
|
||||||
await _msg.edit(content="failed. " + str(e))
|
await _msg.edit(content="failed. " + str(e))
|
||||||
raise e
|
raise e
|
||||||
|
@ -903,7 +902,7 @@ class OtherCog(commands.Cog):
|
||||||
fn = fn[:28]
|
fn = fn[:28]
|
||||||
await _msg.edit(
|
await _msg.edit(
|
||||||
content="Here's your MP3!",
|
content="Here's your MP3!",
|
||||||
file=discord.File(_io, filename=fn + ".mp3")
|
file=discord.File(mp3, filename=fn + ".mp3")
|
||||||
)
|
)
|
||||||
|
|
||||||
await ctx.send_modal(TextModal())
|
await ctx.send_modal(TextModal())
|
||||||
|
|
19
main.py
19
main.py
|
@ -5,7 +5,7 @@ import discord
|
||||||
from discord.ext import commands
|
from discord.ext import commands
|
||||||
import config
|
import config
|
||||||
from datetime import datetime, timezone, timedelta
|
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
|
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.",
|
f"\N{warning sign} This command is already running. Please wait for it to finish.",
|
||||||
ephemeral=True,
|
ephemeral=True,
|
||||||
)
|
)
|
||||||
|
elif isinstance(error, JimmyBanException):
|
||||||
|
return await ctx.respond(str(error))
|
||||||
await ctx.respond("Application Command Error: `%r`" % error)
|
await ctx.respond("Application Command Error: `%r`" % error)
|
||||||
raise 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):
|
async def on_command_error(ctx: commands.Context, error: Exception):
|
||||||
if isinstance(error, commands.CommandNotFound):
|
if isinstance(error, commands.CommandNotFound):
|
||||||
return
|
return
|
||||||
|
elif isinstance(error, JimmyBanException):
|
||||||
|
return await ctx.reply(str(error))
|
||||||
await ctx.reply("Command Error: `%r`" % error)
|
await ctx.reply("Command Error: `%r`" % error)
|
||||||
raise error
|
raise error
|
||||||
|
|
||||||
|
@ -68,7 +72,7 @@ async def ping(ctx: discord.ApplicationContext):
|
||||||
|
|
||||||
@bot.check_once
|
@bot.check_once
|
||||||
async def check_not_banned(ctx: discord.ApplicationContext | commands.Context):
|
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
|
return True
|
||||||
user = ctx.author
|
user = ctx.author
|
||||||
ban: JimmyBans = await get_or_none(JimmyBans, user_id=user.id)
|
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():
|
if dt < discord.utils.utcnow():
|
||||||
await ban.delete()
|
await ban.delete()
|
||||||
else:
|
else:
|
||||||
reply = ctx.reply if isinstance(ctx, commands.Context) else ctx.respond
|
raise JimmyBanException(dt, ban.reason)
|
||||||
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
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
from typing import Optional
|
from typing import Optional, TYPE_CHECKING
|
||||||
from urllib.parse import urlparse
|
from urllib.parse import urlparse
|
||||||
|
|
||||||
|
import discord
|
||||||
from discord.ext import commands
|
from discord.ext import commands
|
||||||
|
|
||||||
from ._email import *
|
from ._email import *
|
||||||
|
@ -8,6 +9,26 @@ from .db import *
|
||||||
from .console import *
|
from .console import *
|
||||||
from .views 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(
|
def simple_embed_paginator(
|
||||||
lines: list[str], *, assert_ten: bool = False, empty_is_none: bool = True, **kwargs
|
lines: list[str], *, assert_ten: bool = False, empty_is_none: bool = True, **kwargs
|
||||||
|
|
Loading…
Reference in a new issue