we do a little tracing
This commit is contained in:
parent
b05346fb95
commit
ff7263b764
@ -2,6 +2,8 @@
|
||||
FROM python:3.10
|
||||
WORKDIR /v6
|
||||
ENV v6root=/v6data
|
||||
COPY base.requirements.txt base.requirements.txt
|
||||
RUN pip install -r base.requirements.txt
|
||||
COPY requirements.txt requirements.txt
|
||||
RUN pip install -r requirements.txt
|
||||
COPY v6d3vote v6d3vote
|
||||
|
2
base.requirements.txt
Normal file
2
base.requirements.txt
Normal file
@ -0,0 +1,2 @@
|
||||
aiohttp~=3.7.4.post0
|
||||
discord.py~=1.7.3
|
@ -1,4 +1,5 @@
|
||||
aiohttp~=3.7.4.post0
|
||||
discord.py~=1.7.3
|
||||
git+https://gitea.parrrate.ru/PTV/v6d1tokens.git@c4c6cf43b1082c666e6891f73df825acee6ae86d
|
||||
git+https://gitea.parrrate.ru/PTV/v6d2ctx.git@096314b9bbb6153a9a75afcc16ddf7833384df18
|
||||
ptvp35 @ git+https://gitea.parrrate.ru/PTV/ptvp35.git@c9cdbf86a67eaf817baf0bc23e0440b54c070362
|
||||
v6d0auth @ git+https://gitea.parrrate.ru/PTV/v6d0auth.git@c4b7a4900d36cb74b5aa544864cbbd3125415bb4
|
||||
v6d1tokens @ git+https://gitea.parrrate.ru/PTV/v6d1tokens.git@22c9784d20d6d9d860d4f1c0da41254db17ab9a2
|
||||
v6d2ctx @ git+https://gitea.parrrate.ru/PTV/v6d2ctx.git@2f0ac33c0228d43b9263ca31f584be2f96ad84eb
|
||||
rainbowadn @ git+https://gitea.parrrate.ru/PTV/rainbowadn.git@add1e7cdbf817811d4b85baec63ed0b87ae96dae
|
||||
|
@ -1,6 +1,6 @@
|
||||
import asyncio
|
||||
import os
|
||||
from typing import Optional
|
||||
from typing import Optional, TypedDict
|
||||
|
||||
import discord
|
||||
from ptvp35 import Db, KVJson
|
||||
@ -8,6 +8,7 @@ from v6d1tokens.client import request_token
|
||||
from v6d2ctx.context import Context, at, monitor, Explicit
|
||||
from v6d2ctx.handle_content import handle_content
|
||||
from v6d2ctx.lock_for import lock_for
|
||||
from v6d2ctx.pain import ALog, SLog
|
||||
from v6d2ctx.serve import serve
|
||||
|
||||
from v6d3vote.config import prefix, myroot
|
||||
@ -48,6 +49,13 @@ async def help_(ctx: Context, args: list[str]) -> None:
|
||||
await ctx.reply(f'help for {name}: `{name} help`')
|
||||
|
||||
|
||||
class SavedPoll(TypedDict):
|
||||
votes: dict[str, str]
|
||||
emojis: dict[str, str]
|
||||
options: list[str]
|
||||
title: str
|
||||
|
||||
|
||||
class Poll:
|
||||
def __init__(
|
||||
self,
|
||||
@ -128,10 +136,10 @@ class Poll:
|
||||
|
||||
@classmethod
|
||||
async def load(cls, message: discord.Message) -> Optional['Poll']:
|
||||
saved: Optional[dict[str, dict[str, str] | list[str]]] = vote_db.get(message.id, None)
|
||||
saved: Optional[SavedPoll] = vote_db.get(message.id, None)
|
||||
if saved is None:
|
||||
return None
|
||||
# noinspection PyTypeChecker
|
||||
assert message.guild is not None
|
||||
guild: discord.Guild = message.guild
|
||||
return cls(
|
||||
message,
|
||||
@ -143,11 +151,16 @@ class Poll:
|
||||
|
||||
@classmethod
|
||||
async def global_vote(cls, rrae: discord.RawReactionActionEvent):
|
||||
assert client.user is not None
|
||||
if rrae.user_id == client.user.id:
|
||||
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)
|
||||
member: discord.Member = guild.get_member(rrae.user_id) or await guild.fetch_member(rrae.user_id)
|
||||
channel: discord.TextChannel = guild.get_channel(rrae.channel_id)
|
||||
_channel = guild.get_channel(rrae.channel_id)
|
||||
assert isinstance(_channel, discord.TextChannel)
|
||||
channel: discord.TextChannel = _channel
|
||||
message: discord.Message = await channel.fetch_message(rrae.message_id)
|
||||
if message.author != client.user:
|
||||
return
|
||||
@ -158,7 +171,7 @@ class Poll:
|
||||
await poll.vote(member, rrae.emoji, rrae.event_type == 'REACTION_REMOVE')
|
||||
await poll.save()
|
||||
|
||||
async def vote(self, member: discord.Member, emoji: discord.Emoji | 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:
|
||||
@ -197,7 +210,7 @@ async def create_poll(ctx: Context, args: list[str]) -> None:
|
||||
await ctx.reply('`poll emoji option [emoji option ...]` (reply fork)')
|
||||
case []:
|
||||
raise Explicit('no options')
|
||||
case [*args] if ctx.message.reference is not None and ctx.message.reference.resolved is not None:
|
||||
case [*args] if ctx.message.reference is not None and isinstance(ctx.message.reference.resolved, discord.Message):
|
||||
refd: discord.Message = ctx.message.reference.resolved
|
||||
poll = await Poll.load(refd)
|
||||
if poll is None:
|
||||
@ -228,7 +241,21 @@ async def main():
|
||||
if os.getenv('v6monitor'):
|
||||
loop.create_task(monitor())
|
||||
await client.connect()
|
||||
print('exited')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
serve(main(), client, loop)
|
||||
from contextlib import ExitStack
|
||||
with ExitStack() as es:
|
||||
ALog(client, 'connect').enter(es)
|
||||
ALog(client, 'close').enter(es)
|
||||
ALog(Db, '__aenter__').enter(es)
|
||||
ALog(Db, '__aexit__').enter(es)
|
||||
ALog(Db, 'aclose').enter(es)
|
||||
ALog(Db, '_build_file').enter(es)
|
||||
SLog(Db, '_build_file_sync').enter(es)
|
||||
SLog(Db, '_finish_recovery_sync').enter(es)
|
||||
SLog(Db, '_copy_sync').enter(es)
|
||||
ALog(loop, 'run_in_executor').enter(es)
|
||||
serve(main(), client, loop)
|
||||
print('after serve')
|
||||
|
Loading…
Reference in New Issue
Block a user