|
|
|
@ -5,39 +5,44 @@ import logging
|
|
|
|
|
from random import choice
|
|
|
|
|
|
|
|
|
|
from discord.ext import commands
|
|
|
|
|
from settings.config import IMAGE_TYPES, PERMISSIONS
|
|
|
|
|
|
|
|
|
|
from utils.database import get_by_id, get_quotes, remove_quote, set_quote, count_quotes
|
|
|
|
|
|
|
|
|
|
from settings.config import PERMISSIONS
|
|
|
|
|
from utils.database import (count_quotes, get_by_id, get_quote_contains,
|
|
|
|
|
get_quotes, remove_quote, set_quote)
|
|
|
|
|
|
|
|
|
|
client = commands.Bot(command_prefix='--')
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
|
|
quote_id_stack = []
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@client.command(aliases=['q'])
|
|
|
|
|
async def quote(bot: object, *quote: str) -> str:
|
|
|
|
|
"""
|
|
|
|
|
Saves a quote into the database.
|
|
|
|
|
"""
|
|
|
|
|
if not quote:
|
|
|
|
|
return await bot.send('You\'re not my mute uncle, tell me something to remember.\n(You haven\'t provided a quote)')
|
|
|
|
|
return await bot.send('You\'re not my mute uncle, tell me something to remember.\n'\
|
|
|
|
|
'(You haven\'t provided a quote)')
|
|
|
|
|
|
|
|
|
|
quote = ' '.join(quote)
|
|
|
|
|
|
|
|
|
|
if 'http' in quote and 'discord' in quote and not quote[-4:] == '.png':
|
|
|
|
|
return await bot.send("- _Check your link, dumbass! You're trying to quote an image from a message, but you're quoting the message itself!_\n"\
|
|
|
|
|
'(Make sure to copy the link for the image by clicking on it, right-clicking the image and then clicking on "Save Link")')
|
|
|
|
|
if 'http' in quote and 'discord' in quote and not quote[-4:] in IMAGE_TYPES:
|
|
|
|
|
return await bot.send("- _Check your link, dumbass! You're trying to quote an image from a"\
|
|
|
|
|
" 'message, but you're quoting the message itself!_\n"\
|
|
|
|
|
"'(Make sure to copy the link for the image by clicking on it, right-clicking the "\
|
|
|
|
|
"image and then clicking on \"Save Link\")'")
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
user = bot.author.name
|
|
|
|
|
qtid = set_quote(user, quote)
|
|
|
|
|
except Exception as ex:
|
|
|
|
|
if ex.args[0].find("Duplicate") != -1:
|
|
|
|
|
return await bot.send("There's already a quote from that same person, with that exact match!")
|
|
|
|
|
return await bot.send("There's already a quote from that same person, with that "\
|
|
|
|
|
"exact match!")
|
|
|
|
|
return await bot.send(f'{ex.args}\n_What the fuck are you doing?_')
|
|
|
|
|
else:
|
|
|
|
|
return await bot.send("Done: `" + quote + "` ID: `" + str(qtid) + "`")
|
|
|
|
|
return await bot.send(f"Done: `{quote}\n` ID: `{qtid}`")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@client.command(aliases=['rq'])
|
|
|
|
@ -53,7 +58,8 @@ async def random_quote(bot: object) -> str:
|
|
|
|
|
quote_id_stack.pop(0)
|
|
|
|
|
quotes = get_quotes(quote_id_stack)
|
|
|
|
|
elif not quotes:
|
|
|
|
|
return await bot.send('You\'ve got no quotes saved yet.\n(Save quotes by using `--q <quote`)')
|
|
|
|
|
return await bot.send('You\'ve got no quotes saved yet.\n(Save quotes by using '\
|
|
|
|
|
'`--q <quote`)')
|
|
|
|
|
|
|
|
|
|
chosen_one = choice(quotes)
|
|
|
|
|
quote_id_stack.append(chosen_one.id)
|
|
|
|
@ -72,17 +78,15 @@ async def random_quote(bot: object) -> str:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@client.command(aliases=['qid'])
|
|
|
|
|
async def by_id(bot, _id: int=None) -> str:
|
|
|
|
|
async def by_id(bot: object, _id: int=None) -> str:
|
|
|
|
|
"""
|
|
|
|
|
Gets one quote by ID.
|
|
|
|
|
"""
|
|
|
|
|
syntax = "`--qid <quote id>`"
|
|
|
|
|
|
|
|
|
|
if not _id:
|
|
|
|
|
return await bot.send(f"_If you don't tell me the ID, how the fuck do you expect me to quote it to you!?_\n(The correct syntax is {syntax})")
|
|
|
|
|
|
|
|
|
|
if not isinstance(_id, int):
|
|
|
|
|
return await bot.send(f"_Don't fuck with me, you asshole. The ID needs to be an interger!_\n(The correct syntax is {syntax})")
|
|
|
|
|
return await bot.send("_If you don't tell me the ID, how the fuck do you expect me to "\
|
|
|
|
|
f"quote it to you!?_\n(The correct syntax is {syntax})")
|
|
|
|
|
|
|
|
|
|
quote = get_by_id(_id)
|
|
|
|
|
|
|
|
|
@ -116,10 +120,8 @@ async def delete_quote(bot, _id: int=None) -> str:
|
|
|
|
|
"(You don't have the necessary role for this command)")
|
|
|
|
|
|
|
|
|
|
if not _id:
|
|
|
|
|
return await bot.send(f"_If you don't tell me the ID, how the fuck do you expect me to delete it to you!?_\n(The correct syntax is {syntax})")
|
|
|
|
|
|
|
|
|
|
if not isinstance(_id, int):
|
|
|
|
|
return await bot.send(f"_Don't fuck with me, you asshole. The ID needs to be an interger!_\n(The correct syntax is {syntax})")
|
|
|
|
|
return await bot.send("_If you don't tell me the ID, how the fuck do you expect me to "\
|
|
|
|
|
f"delete it to you!?_\n(The correct syntax is {syntax})")
|
|
|
|
|
|
|
|
|
|
quote = get_by_id(_id)
|
|
|
|
|
|
|
|
|
@ -143,19 +145,18 @@ async def queue_stack(bot: object) -> str:
|
|
|
|
|
return await bot.send('A list of the 5 latest message IDs follows:'\
|
|
|
|
|
f' `{",".join(str(q) for q in quote_id_stack[-5:])}`')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@client.command(aliases=['cq', 'cquotes'])
|
|
|
|
|
async def quote_count(bot: object) -> str:
|
|
|
|
|
"""
|
|
|
|
|
Outputs a quote count from the database
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
amount = count_quotes()
|
|
|
|
|
amount = str(amount)
|
|
|
|
|
|
|
|
|
|
msg = "Quote count: `" + amount + "`"
|
|
|
|
|
msg = f"Quote count: `{amount}`"
|
|
|
|
|
|
|
|
|
|
return await bot.send(msg)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@client.command(aliases=['v', 'version'])
|
|
|
|
|
async def info(bot: object) -> str:
|
|
|
|
|
"""
|
|
|
|
@ -174,8 +175,33 @@ async def info(bot: object) -> str:
|
|
|
|
|
motd = open("./motd", mode='r')
|
|
|
|
|
text = motd.readlines()
|
|
|
|
|
fullbanner = ""
|
|
|
|
|
|
|
|
|
|
for lines in text:
|
|
|
|
|
fullbanner = fullbanner + lines
|
|
|
|
|
msg = f'''```\n''' + fullbanner + f'''\n```'''
|
|
|
|
|
|
|
|
|
|
msg = f'''```\n{fullbanner}\n```'''
|
|
|
|
|
|
|
|
|
|
return await bot.send(msg)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@client.command(aliases=['qcontains', 'qsearch'])
|
|
|
|
|
async def quote_contains(bot: object, part: str) -> str:
|
|
|
|
|
"""
|
|
|
|
|
Filter quote by part of saved message.
|
|
|
|
|
"""
|
|
|
|
|
syntax = '--qcontains <part>'
|
|
|
|
|
|
|
|
|
|
if not part:
|
|
|
|
|
return await bot.send("_If you don't tell me the part, how the fuck do you expect me to "\
|
|
|
|
|
f"find it to you!?_\n(The correct syntax is {syntax})")
|
|
|
|
|
|
|
|
|
|
quotes = get_quote_contains(part)
|
|
|
|
|
|
|
|
|
|
if not quotes:
|
|
|
|
|
return await bot.send(f"_Wrong text, sucker!_\n(There's no such quote with text `{part}`)")
|
|
|
|
|
|
|
|
|
|
for quote in quotes:
|
|
|
|
|
await bot.send(f'```\nID: {quote.id}\nMessage: {quote.quote[:10]} ... '\
|
|
|
|
|
f'{quote.quote[-10:]}\nUser: {quote.user}\n```')
|
|
|
|
|
|
|
|
|
|
return
|
|
|
|
|