From 637ffd313c3a79d1052910c0ce2d7da7c5051978 Mon Sep 17 00:00:00 2001 From: parrrate Date: Sat, 29 Jun 2024 18:20:17 +0000 Subject: [PATCH] token env --- v6d3vote/run-bot.py | 51 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 40 insertions(+), 11 deletions(-) diff --git a/v6d3vote/run-bot.py b/v6d3vote/run-bot.py index da7cb7d..116234c 100644 --- a/v6d3vote/run-bot.py +++ b/v6d3vote/run-bot.py @@ -1,6 +1,7 @@ from __future__ import annotations import asyncio +import os from typing import TypedDict import discord @@ -17,7 +18,7 @@ from v6d2ctx.serve import * loop = asyncio.new_event_loop() asyncio.set_event_loop(loop) -token = loop.run_until_complete(request_token("vote", "token")) +token = os.getenv("DISCORD_TOKEN", "unset") client = discord.Client( intents=discord.Intents( members=True, @@ -73,7 +74,9 @@ class Poll: self.message = message self.votes = votes self.emojis = emojis - self.reverse: dict[str, str] = {emoji: option for option, emoji in emojis.items()} + self.reverse: dict[str, str] = { + emoji: option for option, emoji in emojis.items() + } self.options = options self.title = title @@ -90,7 +93,8 @@ class Poll: for _, option in self.votes.items(): count[option] = count.get(option, 0) + 1 return f"{self.title}\n" + "\n".join( - f"{self.emojis[option]} `{count.get(option, 0)}` {option}" for option in self.options + f"{self.emojis[option]} `{count.get(option, 0)}` {option}" + for option in self.options ) async def save(self): @@ -99,7 +103,11 @@ class Poll: @classmethod async def create( - cls, ctx: Context, options: list[tuple[str, discord.Emoji | str]], title: str, votes: dict[discord.Member, str] + cls, + ctx: Context, + options: list[tuple[str, discord.Emoji | str]], + title: str, + votes: dict[discord.Member, str], ): message: discord.Message = await ctx.channel.send("creating poll...") async with lock_for(message, "failed to create poll"): @@ -120,11 +128,16 @@ class Poll: await ctx.message.delete() @staticmethod - async def load_votes(guild: discord.Guild, votes: dict[str, str]) -> dict[discord.Member, str]: + async def load_votes( + guild: discord.Guild, votes: dict[str, str] + ) -> dict[discord.Member, str]: loaded: dict[discord.Member, str] = {} for member, option in votes.items(): try: - loaded[guild.get_member(int(member)) or await guild.fetch_member(int(member))] = option + loaded[ + guild.get_member(int(member)) + or await guild.fetch_member(int(member)) + ] = option except (ValueError, discord.HTTPException): pass return loaded @@ -159,7 +172,9 @@ class Poll: def schedule_save(self) -> asyncio.Future[None]: vote_db.set_nowait(self.message.id, self.saved()) if self.message.id not in self.tasks: - self.tasks[self.message.id] = asyncio.create_task(self._scheduled_save(self.message)) + self.tasks[self.message.id] = asyncio.create_task( + self._scheduled_save(self.message) + ) return self.tasks[self.message.id] @classmethod @@ -169,7 +184,9 @@ class Poll: return assert rrae.guild_id is not None assert rrae.channel_id is not None - guild: discord.Guild = client.get_guild(rrae.guild_id) or await client.fetch_guild(rrae.guild_id) + guild: discord.Guild = client.get_guild( + rrae.guild_id + ) or await client.fetch_guild(rrae.guild_id) _channel = guild.get_channel(rrae.channel_id) assert isinstance(_channel, discord.TextChannel) channel: discord.TextChannel = _channel @@ -182,14 +199,18 @@ class Poll: poll = await cls.load(message) if poll is None: return - member: discord.Member = guild.get_member(rrae.user_id) or await guild.fetch_member(rrae.user_id) + member: discord.Member = guild.get_member( + rrae.user_id + ) or await guild.fetch_member(rrae.user_id) print("processing", rrae.emoji, rrae.event_type) await poll.vote(member, rrae.emoji, rrae.event_type == "REACTION_REMOVE") print("processed ", rrae.emoji, rrae.event_type) future = poll.schedule_save() await future - async def vote(self, member: discord.Member, emoji: discord.PartialEmoji | str, remove: bool): + async def vote( + self, member: discord.Member, emoji: discord.PartialEmoji | str, remove: bool + ): if str(emoji) in self.reverse: option = self.reverse[str(emoji)] if remove: @@ -210,7 +231,15 @@ async def poll_options(args: list[str]) -> list[tuple[str, discord.Emoji | str]] if "<" in emoji and ">" in emoji: try: emoji = ( - client.get_emoji(int("".join(c for c in emoji.rsplit(":", 1)[-1] if c.isdecimal()))) + client.get_emoji( + int( + "".join( + c + for c in emoji.rsplit(":", 1)[-1] + if c.isdecimal() + ) + ) + ) or emoji ) except (discord.NotFound, ValueError):