commit d3dc9c09e358add46070bae8eeff1f20b7c99a3f Author: Interitio Date: Wed Jul 22 17:43:19 2026 +0300 Initial Template Commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..4f30065 --- /dev/null +++ b/__init__.py @@ -0,0 +1 @@ +from .plugin import setup, twitch_setup diff --git a/data/awesome-v1.sql b/data/awesome-v1.sql new file mode 100644 index 0000000..6fb0d8e --- /dev/null +++ b/data/awesome-v1.sql @@ -0,0 +1,11 @@ +BEGIN; + +-- Version dependency checks +DO $$ + ASSERT current_module_version('PROFILES') = 1, 'Dependency version mismatch: PROFILES'; +$$ LANGUAGE plpgsql; + +-- Plugin version history +INSERT INTO version_history (component, from_version, to_version, author) VALUES ('AWESOME_PLUGIN', 0, 1, 'Initial Creation'); + +COMMIT; diff --git a/plugin/__init__.py b/plugin/__init__.py new file mode 100644 index 0000000..d230ba3 --- /dev/null +++ b/plugin/__init__.py @@ -0,0 +1,11 @@ +import logging + +logger = logging.getLogger(__name__) + +from .discord import setup +from .twitch import setup as twitch_setup + +__all__ = ( + 'setup', + 'twitch_setup', +) diff --git a/plugin/awesome.py b/plugin/awesome.py new file mode 100644 index 0000000..3784517 --- /dev/null +++ b/plugin/awesome.py @@ -0,0 +1,15 @@ +from typing import Optional +from .data import ( + AwesomeData, + AwesomeTable, +) + + +class AwesomeRegistry: + VERSION = AwesomeData.VERSION + + def __init__(self, data: AwesomeData): + self.data = data + + async def init(self): + await self.data.init() diff --git a/plugin/data.py b/plugin/data.py new file mode 100644 index 0000000..9c3e7b6 --- /dev/null +++ b/plugin/data.py @@ -0,0 +1,17 @@ +from data import Registry, RowModel, Table +from data.columns import String, Timestamp, Integer, Bool + + +class AwesomeTable(RowModel): + _tablename_ = "awesome_table" + _cache_ = {} + + userid = String(primary=True) + _timestamp = Timestamp() + + +class AwesomeData(Registry): + VERSION = ("AWESOME", 1) + + AwesomeTable = AwesomeTable + awesome_table = AwesomeTable.table diff --git a/plugin/discord/__init__.py b/plugin/discord/__init__.py new file mode 100644 index 0000000..0dd58d9 --- /dev/null +++ b/plugin/discord/__init__.py @@ -0,0 +1,7 @@ +from .. import logger + + +async def setup(bot): + from .cog import AwesomeCog + + await bot.add_cog(AwesomeCog(bot)) diff --git a/plugin/discord/cog.py b/plugin/discord/cog.py new file mode 100644 index 0000000..0263343 --- /dev/null +++ b/plugin/discord/cog.py @@ -0,0 +1,26 @@ +from typing import Optional +import asyncio + +import discord +from discord.ext import commands as cmds +from discord import app_commands as appcmds + +from meta import LionBot, LionCog, LionContext +from meta.logger import log_wrap +from utils.lib import utc_now + +from ..data import AwesomeData +from ..awesome import AwesomeRegistry + + +class AwesomeCog(LionCog): + def __init__(self, bot: LionBot): + self.bot = bot + + self.data = bot.db.load_registry(AwesomeData()) + self.profiles = AwesomeRegistry(self.data) + + async def cog_load(self): + await self.data.init() + await self.bot.version_check(*self.data.VERSION) + await self.profiles.init() diff --git a/plugin/twitch/__init__.py b/plugin/twitch/__init__.py new file mode 100644 index 0000000..a3601a2 --- /dev/null +++ b/plugin/twitch/__init__.py @@ -0,0 +1,11 @@ +from typing import TYPE_CHECKING +from .. import logger + +if TYPE_CHECKING: + from meta.bot import Bot + + +async def setup(bot: "Bot"): + from .component import AwesomeComponent + + await bot.add_component(AwesomeComponent(bot)) diff --git a/plugin/twitch/component.py b/plugin/twitch/component.py new file mode 100644 index 0000000..3e97334 --- /dev/null +++ b/plugin/twitch/component.py @@ -0,0 +1,33 @@ +from typing import Optional +import asyncio + +import twitchio +from twitchio.ext import commands as cmds + +from meta import Bot +from meta.logger import log_wrap +from utils.lib import utc_now + +from . import logger + +from ..data import AwesomeData +from ..awesome import AwesomeRegistry + + +class AwesomeComponent(cmds.Component): + def __init__(self, bot: Bot): + self.bot = bot + + self.data = bot.dbconn.load_registry(AwesomeData()) + self.awesome = AwesomeRegistry(self.data) + + # ----- API ----- + async def component_load(self): + await self.data.init() + await self.bot.version_check(*self.data.VERSION) + await self.profiles.init() + + async def component_teardown(self): + pass + + # ------ Commands ----- diff --git a/plugin/web/__init__.py b/plugin/web/__init__.py new file mode 100644 index 0000000..e69de29