tuxbot-bot/tuxbot/core/utils/functions/extra.py

73 lines
2.2 KiB
Python
Raw Normal View History

import asyncio
2020-05-23 23:16:08 +00:00
import discord
from discord import Embed
from discord.ext import commands, flags
2020-09-01 22:08:06 +00:00
from rich.console import Console
2020-09-01 22:08:06 +00:00
console = Console()
TOKEN_REPLACEMENT = "whoops, leaked token"
2020-09-01 22:08:06 +00:00
2020-05-23 23:16:08 +00:00
class ContextPlus(commands.Context):
2020-10-20 21:52:05 +00:00
async def send(self, *args, content=None, **kwargs):
if content is not None:
content = content.replace(
self.bot.config.Core.token, TOKEN_REPLACEMENT
)
if kwargs.get("embed"):
embed = kwargs.get("embed").to_dict()
for key, value in embed.items():
if isinstance(value, (str, bytes)):
embed[key] = value.replace(
self.bot.config.Core.token, TOKEN_REPLACEMENT
)
kwargs["embed"] = Embed.from_dict(embed)
2020-06-06 16:51:47 +00:00
if (
hasattr(self.command, "deletable") and self.command.deletable
2020-09-01 22:08:06 +00:00
) or kwargs.pop("deletable", False):
message = await super().send(content, *args, **kwargs)
2020-06-06 16:51:47 +00:00
await message.add_reaction("🗑")
def check(reaction: discord.Reaction, user: discord.User):
2020-06-06 16:51:47 +00:00
return (
user == self.author
and str(reaction.emoji) == "🗑"
and reaction.message.id == message.id
)
try:
2020-09-01 22:08:06 +00:00
await self.bot.wait_for(
"reaction_add", timeout=42.0, check=check
2020-09-01 22:08:06 +00:00
)
except asyncio.TimeoutError:
2020-06-06 16:51:47 +00:00
await message.remove_reaction("🗑", self.bot.user)
else:
await message.delete()
return message
2020-10-20 21:56:02 +00:00
return await super().send(content, *args, **kwargs)
class CommandPLus(flags.FlagCommand):
def __init__(self, function, **kwargs):
super().__init__(function, **kwargs)
self.deletable = kwargs.pop("deletable", True)
def command_extra(*args, **kwargs):
return commands.command(*args, **kwargs, cls=CommandPLus)
class GroupPlus(flags.FlagGroup):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.deletable = kwargs.pop("deletable", True)
def group_extra(*args, **kwargs):
return commands.group(*args, **kwargs, cls=GroupPlus)