98 lines
2.9 KiB
Python
Raw Normal View History

2020-12-19 20:02:52 -05:00
import logging
2021-01-25 18:16:36 -05:00
import textwrap
2020-12-19 20:02:52 -05:00
from discord.ext import commands
from miyu_bot.bot.bot import D4DJBot
2020-12-19 20:02:52 -05:00
from miyu_bot.commands.common.fuzzy_matching import romanize, FuzzyMatcher
class Utility(commands.Cog):
bot: D4DJBot
def __init__(self, bot):
2020-12-19 20:02:52 -05:00
self.bot = bot
self.logger = logging.getLogger(__name__)
@commands.command(hidden=True)
2021-01-14 08:41:49 -05:00
@commands.is_owner()
2020-12-19 20:02:52 -05:00
async def romanize(self, ctx: commands.Context, *, arg: str):
await ctx.send(romanize(arg))
@commands.command(hidden=True, ignore_extra=False)
2021-01-14 08:41:49 -05:00
@commands.is_owner()
2020-12-19 20:02:52 -05:00
async def similarity_score(self, ctx: commands.Context, source: str, target: str):
await ctx.send(str(FuzzyMatcher().score(romanize(source), romanize(target))))
2021-01-21 16:31:34 -05:00
@commands.command(hidden=True)
@commands.is_owner()
async def shutdown(self, ctx: commands.Context):
await self.bot.logout()
2021-01-25 17:52:28 -05:00
@commands.command(name='eval', hidden=True)
@commands.is_owner()
2021-01-25 18:16:36 -05:00
async def eval_cmd(self, ctx: commands.Context, *, body: str):
2021-01-25 17:52:28 -05:00
env = {
'bot': self.bot,
'ctx': ctx,
'assets': self.bot.assets,
'asset_filters': self.bot.asset_filters,
**globals(),
}
if body and body[0] == '`' and body[-1] == '`':
body = body[1:-1]
try:
value = eval(body, env)
if value:
await ctx.send(str(value))
else:
await ctx.send('Done')
except Exception as e:
await ctx.send(f'```{e.__class__.__name__}: {e}\n```')
2021-01-25 18:16:36 -05:00
@commands.command(name='exec', hidden=True)
@commands.is_owner()
async def exec_cmd(self, ctx: commands.Context, *, body: str):
env = {
'bot': self.bot,
'ctx': ctx,
'assets': self.bot.assets,
'asset_filters': self.bot.asset_filters,
**globals(),
}
if body and body[:9] == '```python' and body[-3:] == '```':
body = body[9:-3]
if body and body[:3] == '```' and body[-3:] == '```':
body = body[3:-3]
if body and body[:1] == '`' and body[-1:] == '`':
body = body[1:-1]
body = 'async def f():\n' + textwrap.indent(body, ' ')
l = locals()
exec(body, env, l)
f = l['f']
try:
value = await f()
if value:
await ctx.send(str(value))
else:
await ctx.send('Done')
except Exception as e:
await ctx.send(f'```{e.__class__.__name__}: {e}\n```')
2021-01-15 23:19:40 -05:00
@commands.command(name='invite',
aliases=[],
description='Sends the bot invite.',
help='!invite')
async def invite(self, ctx: commands.Context):
2021-01-25 17:52:28 -05:00
await ctx.send(
'https://discord.com/api/oauth2/authorize?client_id=789314370999287808&permissions=388160&scope=bot')
2021-01-15 23:19:40 -05:00
2020-12-19 20:02:52 -05:00
def setup(bot):
bot.add_cog(Utility(bot))