diff --git a/starbot/starbot/__main__.py b/starbot/starbot/__main__.py index 7e05169..d8840e7 100644 --- a/starbot/starbot/__main__.py +++ b/starbot/starbot/__main__.py @@ -49,8 +49,10 @@ def main(): try: loop.run_until_complete(task) except (KeyboardInterrupt, InterruptedError, RuntimeError): - close(bot, loop) - loop.run_until_complete(task) + try: + close(bot, loop) + finally: + loop.run_until_complete(task) if __name__ == "__main__": diff --git a/starbot/starbot/db_aiosqlite.py b/starbot/starbot/db_aiosqlite.py index 52b07b1..c9b6c53 100644 --- a/starbot/starbot/db_aiosqlite.py +++ b/starbot/starbot/db_aiosqlite.py @@ -6,8 +6,6 @@ from typing import Any import aiosqlite -from starbot.db import AbstractDbManager - from .db import AbstractConnection, AbstractDbFactory, AbstractDbManager @@ -42,7 +40,7 @@ class Adapter(AbstractConnection): async def manager(path: Path): async with aiosqlite.connect(path) as connection: db: dict[Hashable, Any] = {} - await connection.execute("CREATE TABLE IF NOT EXISTS kv(key, value)") + await connection.execute("CREATE TABLE IF NOT EXISTS kv(key PRIMARY KEY, value)") for key, value in await connection.execute_fetchall("SELECT key, value FROM kv"): db[_load_key(json.loads(key))] = json.loads(value) yield Adapter(connection, db) diff --git a/starbot/starbot/stars.py b/starbot/starbot/stars.py index 2cf7362..913cb16 100644 --- a/starbot/starbot/stars.py +++ b/starbot/starbot/stars.py @@ -8,10 +8,9 @@ from typing import AsyncContextManager, Callable, Generic, Hashable, Type, TypeV import discord from discord.ext import commands -from starbot.instrumentation import Instrumentation - from .bot import Reservations, StarBot, StarState from .db import AbstractConnection +from .instrumentation import Instrumentation T = TypeVar("T") @@ -91,7 +90,7 @@ class MessageState: return inner() - async def __aexit__(self, et, ev, tb, /): + async def __aexit__(self, et, _ev, _tb, /): return et and issubclass(et, EventuallyConsistent) @@ -199,10 +198,11 @@ class ReactionCtx: async def on(self) -> None: if self.name != "⭐": return - assignment: dict[str, int] | None = self.connection.get(("assign", self.guild_id), None) - if assignment is None: - return - star_channel_id, count = assignment["channel"], assignment["count"] + match self.connection.get(("assign", self.guild_id), None): + case {"channel": int() as star_channel_id, "count": int() as count}: + pass + case _: + return if self.channel_id == star_channel_id: return await StarEventCtx(self, star_channel_id, count).on()