diff options
author | 2018-11-20 02:09:20 +0100 | |
---|---|---|
committer | 2018-11-20 02:09:20 +0100 | |
commit | 2262f684e03d004ad65bf023eca7e649489b891f (patch) | |
tree | 235acdd38426c90dc90b2387ede580883292ee49 /bot/cogs/monstersurvey.py | |
parent | Merge branch 'vote-monster-refactor' of https://github.com/dfitzpatrick/hackt... (diff) |
Minor changes
Diffstat (limited to 'bot/cogs/monstersurvey.py')
-rw-r--r-- | bot/cogs/monstersurvey.py | 192 |
1 files changed, 0 insertions, 192 deletions
diff --git a/bot/cogs/monstersurvey.py b/bot/cogs/monstersurvey.py deleted file mode 100644 index 9eafcadc..00000000 --- a/bot/cogs/monstersurvey.py +++ /dev/null @@ -1,192 +0,0 @@ -import json -import logging -import os -from typing import Optional, Union - -from discord import Embed -from discord.ext import commands -from discord.ext.commands import Bot, Context - -log = logging.getLogger(__name__) - -EMOJIS = { - 'SUCCESS': u'\u2705', - 'ERROR': u'\u274C' -} - - -class MonsterSurvey: - """ - Vote for your favorite monster! - This command allows users to vote for their favorite listed monster. - Users may change their vote, but only their current vote will be counted. - """ - - def __init__(self, bot: Bot): - """Initializes values for the bot to use within the voting commands.""" - self.bot = bot - self.registry_location = os.path.join(os.getcwd(), 'bot', 'resources', 'monstersurvey', 'monstersurvey.json') - with open(self.registry_location, 'r') as jason: - self.voter_registry = json.load(jason) - - def json_write(self): - log.info("Saved Monster Survey Results") - with open(self.registry_location, 'w') as jason: - json.dump(self.voter_registry, jason, indent=2) - - def cast_vote(self, id: int, monster: str): - """ - - :param id: The id of the person voting - :param monster: the string key of the json that represents a monster - :return: None - """ - vr = self.voter_registry - for m in vr.keys(): - if id not in vr[m]['votes'] and m == monster: - vr[m]['votes'].append(id) - else: - if id in vr[m]['votes'] and m != monster: - vr[m]['votes'].remove(id) - - def get_name_by_leaderboard_index(self, n): - n = n - 1 - vr = self.voter_registry - top = sorted(vr, key=lambda k: len(vr[k]['votes']), reverse=True) - name = top[n] if n >= 0 else None - return name - - @commands.group( - name='monster', - aliases=['ms'] - ) - async def monster_group(self, ctx: Context): - """ - The base voting command. If nothing is called, then it will return an embed. - """ - - if ctx.invoked_subcommand is None: - default_embed = Embed( - title='Monster Voting', - color=0xFF6800, - description='Vote for your favorite monster!' - ) - default_embed.add_field( - name='.monster show monster_name(optional)', - value='Show a specific monster. If none is listed, it will give you an error with valid choices.', - inline=False) - default_embed.add_field( - name='.monster vote monster_name', - value='Vote for a specific monster. You get one vote, but can change it at any time.', - inline=False - ) - default_embed.add_field( - name='.monster leaderboard', - value='Which monster has the most votes? This command will tell you.', - inline=False - ) - default_embed.set_footer(text=f"Monsters choices are: {', '.join(self.voter_registry.keys())}") - return await ctx.send(embed=default_embed) - - @monster_group.command( - name='vote' - ) - async def monster_vote(self, ctx: Context, name: Optional[Union[int, str]] = None): - """Casts a vote for a particular monster, or displays a list of monsters that can be voted for - if one is not given.""" - if name is None: - await ctx.invoke(self.monster_leaderboard) - return - vote_embed = Embed( - name='Monster Voting', - color=0xFF6800 - ) - if isinstance(name, int): - name = self.get_name_by_leaderboard_index(name) - else: - name = name.lower() - m = self.voter_registry.get(name) - if m is None: - - vote_embed.description = f'You cannot vote for {name} because it\'s not in the running.' - vote_embed.add_field( - name='Use `.monster show {monster_name}` for more information on a specific monster', - value='or use `.monster vote {monster}` to cast your vote for said monster.', - inline=False - ) - vote_embed.add_field( - name='You may vote for or show the following monsters:', - value=f"{', '.join(self.voter_registry.keys())}" - ) - return await ctx.send(embed=vote_embed) - self.cast_vote(ctx.author.id, name) - vote_embed.add_field( - name='Vote successful!', - value=f'You have successfully voted for {m["full_name"]}!', - inline=False - ) - vote_embed.set_thumbnail(url=m['image']) - vote_embed.set_footer(text="Please note that any previous votes have been removed.") - self.json_write() - return await ctx.send(embed=vote_embed) - - @monster_group.command( - name='show' - ) - async def monster_show(self, ctx: Context, name: Optional[Union[int, str]] = None): - """ - Shows the named monster. If one is not named, it sends the default voting embed instead. - :param ctx: - :param name: - :return: - """ - if name is None: - await ctx.invoke(self.monster_leaderboard) - return - if isinstance(name, int): - m = self.voter_registry.get(self.get_name_by_leaderboard_index(name)) - else: - name = name.lower() - m = self.voter_registry.get(name) - if not m: - await ctx.send('That monster does not exist.') - return await ctx.invoke(self.monster_vote) - embed = Embed(title=m['full_name'], color=0xFF6800) - embed.add_field(name='Summary', value=m['summary']) - embed.set_image(url=m['image']) - embed.set_footer(text=f'To vote for this monster, type .monster vote {name}') - return await ctx.send(embed=embed) - - @monster_group.command( - name='leaderboard', - aliases=['lb'] - ) - async def monster_leaderboard(self, ctx: Context): - """ - Shows the current standings. - :param ctx: - :return: - """ - vr = self.voter_registry - top = sorted(vr, key=lambda k: len(vr[k]['votes']), reverse=True) - - embed = Embed(title="Monster Survey Leader Board", color=0xFF6800) - total_votes = sum(len(m['votes']) for m in self.voter_registry.values()) - for rank, m in enumerate(top): - votes = len(vr[m]['votes']) - percentage = ((votes / total_votes) * 100) if total_votes > 0 else 0 - embed.add_field(name=f"{rank+1}. {vr[m]['full_name']}", - value=f"{votes} votes. {percentage:.1f}% of total votes.\n" - f"Vote for this monster by typing " - f"'.monster vote {m}'\n" - f"Get more information on this monster by typing " - f"'.monster show {m}'", - inline=False) - - embed.set_footer(text="You can also vote by their rank number. '.monster vote {number}' ") - await ctx.send(embed=embed) - - -def setup(bot): - bot.add_cog(MonsterSurvey(bot)) - log.debug("MonsterSurvey COG Loaded") |