add voting reactions method, typehint the rest of the bot.py session.query calls

This commit is contained in:
Xevion
2021-02-14 01:19:56 -06:00
parent 21781d3529
commit e6d001f2b7

View File

@@ -1,7 +1,7 @@
import logging import logging
from contextlib import contextmanager from contextlib import contextmanager
from datetime import datetime from datetime import datetime
from typing import ContextManager from typing import ContextManager, List, Optional
import discord import discord
from discord.ext import commands from discord.ext import commands
@@ -9,7 +9,7 @@ from sqlalchemy.engine import Engine
from sqlalchemy.orm import Session, sessionmaker from sqlalchemy.orm import Session, sessionmaker
from bot import constants from bot import constants
from bot.models import Guild, Period from bot.models import Guild, Period, Submission
logger = logging.getLogger(__file__) logger = logging.getLogger(__file__)
logger.setLevel(constants.LOGGING_LEVEL) logger.setLevel(constants.LOGGING_LEVEL)
@@ -42,7 +42,7 @@ class ContestBot(commands.Bot):
if message.guild: if message.guild:
with self.get_session() as session: with self.get_session() as session:
guild = session.query(Guild).get(message.guild.id) guild: Guild = session.query(Guild).get(message.guild.id)
base.append(guild.prefix) base.append(guild.prefix)
return base return base
@@ -56,7 +56,8 @@ class ContestBot(commands.Bot):
for guild in self.guilds: for guild in self.guilds:
_guild: Guild = session.query(Guild).get(guild.id) _guild: Guild = session.query(Guild).get(guild.id)
if _guild is None: if _guild is None:
logger.warning(f'Guild {guild.name} ({guild.id}) was not inside database on ready. Bot was disconnected or did not add it properly...') logger.warning(
f'Guild {guild.name} ({guild.id}) was not inside database on ready. Bot was disconnected or did not add it properly...')
session.add(Guild(id=guild.id)) session.add(Guild(id=guild.id))
async def on_guild_join(self, guild: discord.Guild) -> None: async def on_guild_join(self, guild: discord.Guild) -> None:
@@ -78,10 +79,29 @@ class ContestBot(commands.Bot):
with self.get_session() as session: with self.get_session() as session:
# Get the associated Guild and mark it as disabled. # Get the associated Guild and mark it as disabled.
_guild = session.query(Guild).filter_by(active=True, id=guild.id).first() _guild: Guild = session.query(Guild).filter_by(active=True, id=guild.id).first()
_guild.active = False _guild.active = False
# Shut down any current running Period objects if possible. # Shut down any current running Period objects if possible.
period: Period = _guild.current_period period: Period = _guild.current_period
if period is not None and period.active: if period is not None and period.active:
period.deactivate() period.deactivate()
async def add_voting_reactions(self, channel: discord.TextChannel, submissions: Optional[List[Submission]]) -> None:
"""Adds reactions to all valid submissions in the given channel."""
if submissions is None:
with self.get_session() as session:
period: Guild = session.query(Guild).get(channel.guild.id).current_period
if period is None:
logger.error('No valid submissions - current period is not set for the Guild this channel belongs to.')
return
else:
submissions = period.submissions
if len(submissions) == 0:
logger.warning('Attempted to add voting reactions to submissions, but none were given.')
return
else:
for submission in submissions:
message: discord.PartialMessage = channel.get_partial_message(submission.id)
await message.add_reaction(self.get_emoji(constants.Emoji.UPVOTE))