1
0
Fork 0
mirror of synced 2024-06-27 18:50:35 +12:00
Bonfire/cogs/tags.py

102 lines
4.4 KiB
Python
Raw Normal View History

2016-08-06 10:00:16 +12:00
import re
2016-07-23 23:59:02 +12:00
2017-03-08 11:35:30 +13:00
from discord.ext import commands
from . import utils
2016-07-31 12:20:55 +12:00
2016-07-23 23:59:02 +12:00
class Tags:
"""This class contains all the commands for custom tags"""
def __init__(self, bot):
self.bot = bot
2016-07-31 12:20:55 +12:00
2017-03-08 11:35:30 +13:00
@commands.command(no_pm=True)
@utils.custom_perms(send_messages=True)
2016-07-23 23:59:02 +12:00
async def tags(self, ctx):
"""Prints all the custom tags that this server currently has
EXAMPLE: !tags
RESULT: All tags setup on this server"""
2017-03-08 11:35:30 +13:00
tags = await utils.get_content('tags', {'server_id': ctx.message.guild.id})
# Simple generator that adds a tag to the list to print, if the tag is for this server
try:
fmt = "\n".join("{}".format(tag['tag']) for tag in tags)
2017-03-08 11:35:30 +13:00
await ctx.send('```\n{}```'.format(fmt))
except TypeError:
2017-03-08 11:35:30 +13:00
await ctx.send("There are not tags setup on this server!")
2016-07-23 23:59:02 +12:00
2017-03-08 11:35:30 +13:00
@commands.group(invoke_without_command=True, no_pm=True)
@utils.custom_perms(send_messages=True)
2016-07-23 23:59:02 +12:00
async def tag(self, ctx, *, tag: str):
"""This can be used to call custom tags
The format to call a custom tag is !tag <tag>
EXAMPLE: !tag butts
RESULT: Whatever you setup for the butts tag!!"""
2017-03-08 11:35:30 +13:00
r_filter = lambda row: (row['server_id'] == ctx.message.guild.id) & (row['tag'] == tag)
2017-03-08 17:28:30 +13:00
tags = await utils.filter_content('tags', r_filter)
if tags is None:
2017-03-08 11:35:30 +13:00
await ctx.send('That tag does not exist!')
2016-07-23 23:59:02 +12:00
return
# We shouldn't ever have two tags of the same name, so just get the first result
2017-03-08 11:35:30 +13:00
await ctx.send("\u200B{}".format(tags[0]['result']))
2016-07-23 23:59:02 +12:00
2017-03-08 11:35:30 +13:00
@tag.command(name='add', aliases=['create', 'start'], no_pm=True)
@utils.custom_perms(kick_members=True)
2016-07-23 23:59:02 +12:00
async def add_tag(self, ctx, *, result: str):
"""Use this to add a new tag that can be used in this server
Format to add a tag is !tag add <tag> - <result>
EXAMPLE: !tag add this is my new tag - This is what it will be
RESULT: A tag that can be called by '!tag this is my new tag' and will output 'This is what it will be'"""
try:
# Use regex to get the matche for everything before and after a -
match = re.search("(.*) - (.*)", result)
tag = match.group(1).strip()
tag_result = match.group(2).strip()
# Next two checks are just to ensure there was a valid match found
except AttributeError:
2017-03-08 11:35:30 +13:00
await ctx.send(
"Please provide the format for the tag in: {}tag add <tag> - <result>".format(ctx.prefix))
2016-07-23 23:59:02 +12:00
return
# If our regex failed to find the content (aka they provided the wrong format)
if len(tag) == 0 or len(tag_result) == 0:
2017-03-08 11:35:30 +13:00
await ctx.send(
"Please provide the format for the tag in: {}tag add <tag> - <result>".format(ctx.prefix))
return
# Make sure the tag created does not mention everyone/here
if '@everyone' in tag_result or '@here' in tag_result:
2017-03-08 11:35:30 +13:00
await ctx.send("You cannot create a tag that mentions everyone!")
return
2017-03-08 11:35:30 +13:00
entry = {'server_id': ctx.message.guild.id, 'tag': tag, 'result': tag_result}
r_filter = lambda row: (row['server_id'] == ctx.message.guild.id) & (row['tag'] == tag)
# Try to create new entry first, if that fails (it already exists) then we update it
2017-03-08 17:28:30 +13:00
if await utils.filter_content('tags', entry, r_filter):
2017-03-08 11:35:30 +13:00
await ctx.send(
"I have just added the tag `{0}`! You can call this tag by entering !tag {0}".format(tag))
else:
2017-03-08 17:28:30 +13:00
await ctx.send("That tag already exists!")
2016-07-23 23:59:02 +12:00
2017-03-08 11:35:30 +13:00
@tag.command(name='delete', aliases=['remove', 'stop'], no_pm=True)
@utils.custom_perms(kick_members=True)
2016-07-23 23:59:02 +12:00
async def del_tag(self, ctx, *, tag: str):
"""Use this to remove a tag from use for this server
Format to delete a tag is !tag delete <tag>
EXAMPLE: !tag delete stupid_tag
RESULT: Deletes that stupid tag"""
2017-03-08 17:28:30 +13:00
await ctx.send("Temporarily disabled")
// TODO: Fix tags, this will inherently fix this method
"""r_filter = lambda row: (row['server_id'] == ctx.message.guild.id) & (row['tag'] == tag)
2017-03-08 11:35:30 +13:00
if await utils.remove_content('tags', r_filter):
await ctx.send('I have just removed the tag `{}`'.format(tag))
else:
2017-03-08 11:35:30 +13:00
await ctx.send(
2017-03-08 17:28:30 +13:00
"The tag {} does not exist! You can't remove something if it doesn't exist...".format(tag))"""
2016-07-24 00:01:16 +12:00
2016-07-31 12:20:55 +12:00
2016-07-24 00:01:16 +12:00
def setup(bot):
bot.add_cog(Tags(bot))