token env
This commit is contained in:
parent
93818a3dc1
commit
637ffd313c
@ -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):
|
||||
|
Loading…
Reference in New Issue
Block a user