token env

This commit is contained in:
AF 2024-06-29 18:20:17 +00:00
parent 93818a3dc1
commit 637ffd313c
Signed by: alisa
SSH Key Fingerprint: SHA256:vNY4pdIZvO1FYJKHROkdHLtvyopizvZVAEwg9AF6h04

View File

@ -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):