From 99898c9a14a30fad431ced6287876b6af553d338 Mon Sep 17 00:00:00 2001 From: Matthias Nadler Date: Mon, 17 Jun 2019 23:29:27 +0200 Subject: [PATCH 1/4] working on 2.4 mention command started with debug command export for custom votes finished cmd --- cogs/help.py | 44 +++- cogs/poll_controls.py | 315 ++++++++++++++++++----------- essentials/multi_server.py | 4 +- models/__init__.py | 0 {cogs => models}/poll.py | 400 +++++++++++++++++++++++++++++++------ pollmaster.py | 2 +- 6 files changed, 581 insertions(+), 184 deletions(-) create mode 100644 models/__init__.py rename {cogs => models}/poll.py (75%) diff --git a/cogs/help.py b/cogs/help.py index 51664e9..4b25dad 100644 --- a/cogs/help.py +++ b/cogs/help.py @@ -51,7 +51,7 @@ class Help(commands.Cog): if page == 'šŸ ': ## POLL CREATION SHORT embed.add_field(name='šŸ†• Making New Polls', - value=f'`{pre}quick` | `{pre}new` | `{pre}prepare` | `{pre}cmd `', inline=False) + value=f'`{pre}quick` | `{pre}new` | `{pre}advanced` | `{pre}prepare` | `{pre}cmd `', inline=False) # embed.add_field(name='Commands', value=f'`{pre}quick` | `{pre}new` | `{pre}prepared`', inline=False) # embed.add_field(name='Arguments', value=f'Arguments: `` (optional)', inline=False) # embed.add_field(name='Examples', value=f'Examples: `{pre}new` | `{pre}quick What is the greenest color?`', @@ -221,6 +221,48 @@ class Help(commands.Cog): # cleanup await ctx.message.delete() + @commands.Cog.listener() + async def on_message(self, message): + if message.content.startswith("@mention "): + channel = message.channel + if not isinstance(channel, discord.TextChannel): + await channel.send("@mention can only be used in a server text channel.") + return + + guild = message.guild + if not guild: + await channel.send("Could not determine your server.") + return + + tag = message.content.split()[1].lower() + if tag == "prefix": + pre = await get_server_pre(self.bot, guild) + # await channel.send(f'The prefix for this server/channel is: \n {pre} \n To change it type: \n' + # f'{pre}prefix ') + await channel.send(pre) + + elif message.content == "@debug": + channel = message.channel + if not isinstance(channel, discord.TextChannel): + await channel.send("@debug can only be used in a server text channel.") + return + + guild = message.guild + if not guild: + await channel.send("Could not determine your server.") + return + + status_msg = '' + + permissions = channel.permissions_for(guild.me) + if not permissions.send_messages: + await message.author.send(f'I don\'t have permission to send text messages in channel {channel} ' + f'on server {guild}') + return + + status_msg += f' āœ… Sending messages\n' + + await channel.send(status_msg) def setup(bot): global logger diff --git a/cogs/poll_controls.py b/cogs/poll_controls.py index 4810682..3ce190a 100644 --- a/cogs/poll_controls.py +++ b/cogs/poll_controls.py @@ -11,26 +11,27 @@ import pytz from discord.ext import commands from utils.misc import CustomFormatter -from .poll import Poll +from models.poll import Poll from utils.paginator import embed_list_paginated from essentials.multi_server import get_server_pre, ask_for_server, ask_for_channel from essentials.settings import SETTINGS from utils.poll_name_generator import generate_word from essentials.exceptions import StopWizard -## A-Z Emojis for Discord +# A-Z Emojis for Discord AZ_EMOJIS = [(b'\\U0001f1a'.replace(b'a', bytes(hex(224 + (6 + i))[2:], "utf-8"))).decode("unicode-escape") for i in range(26)] + class PollControls(commands.Cog): def __init__(self, bot): self.bot = bot - #self.bot.loop.create_task(self.close_polls()) + self.bot.loop.create_task(self.close_polls()) self.ignore_next_removed_reaction = {} - # + # # General Methods - def get_label(self, message : discord.Message): + def get_label(self, message: discord.Message): label = None if message and message.embeds: embed = message.embeds[0] @@ -45,6 +46,10 @@ class PollControls(commands.Cog): """This function runs every 60 seconds to schedule prepared polls and close expired polls""" while True: try: + if not hasattr(self.bot, 'db'): + await asyncio.sleep(30) + continue + query = self.bot.db.polls.find({'active': False, 'activation': {"$not": re.compile("0")}}) if query: for pd in [poll async for poll in query]: @@ -73,17 +78,17 @@ class PollControls(commands.Cog): except: continue except AttributeError as ae: - #Database not loaded yet + # Database not loaded yet logger.warning("Attribute Error in close_polls loop") logger.exception(ae) pass except Exception as ex: - #Never break this loop due to an error + # Never break this loop due to an error logger.error("Other Error in close_polls loop") logger.exception(ex) pass - await asyncio.sleep(30) + await asyncio.sleep(60) def get_lock(self, server_id): if not self.bot.locks.get(server_id): @@ -119,7 +124,7 @@ class PollControls(commands.Cog): embed.set_footer(text=footer_text) await ctx.send(embed=embed) - # # Commands + # Commands @commands.command() async def activate(self, ctx, *, short=None): """Activate a prepared poll. Parameter: