import argparse import asyncio import copy import datetime import json import logging import shlex import discord import pytz from discord.ext import commands from utils.misc import CustomFormatter from .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 class PollControls: def __init__(self, bot): self.bot = bot # General Methods def get_lock(self, server_id): if not self.bot.locks.get(str(server_id)): self.bot.locks[server_id] = asyncio.Lock() return self.bot.locks.get(str(server_id)) async def is_admin_or_creator(self, ctx, server, owner_id, error_msg=None): member = server.get_member(ctx.message.author.id) if member.id == owner_id: return True elif member.server_permissions.manage_server: return True else: result = await self.bot.db.config.find_one({'_id': str(server.id)}) if result and result.get('admin_role') in [r.name for r in member.roles]: return True else: if error_msg is not None: await self.bot.send_message(ctx.message.author, error_msg) return False async def say_error(self, ctx, error_text, footer_text=None): embed = discord.Embed(title='', description=error_text, colour=SETTINGS.color) embed.set_author(name='Error', icon_url=SETTINGS.author_icon) if footer_text is not None: embed.set_footer(text=footer_text) await self.bot.say(embed=embed) async def say_embed(self, ctx, say_text='', title='Pollmaster', footer_text=None): embed = discord.Embed(title='', description=say_text, colour=SETTINGS.color) embed.set_author(name=title, icon_url=SETTINGS.author_icon) if footer_text is not None: embed.set_footer(text=footer_text) await self.bot.say(embed=embed) # Commands @commands.command(pass_context=True) async def activate(self, ctx, *, short=None): """Activate a prepared poll. Parameter: