Move to new plugin framework.

- User `profiles` component for profile and community fetch.
- Add data version check
- Move `datamodels` to `botdata`.
This commit is contained in:
2025-09-02 07:14:51 +10:00
parent 094b1e3c57
commit 4707bc2aca
4 changed files with 29 additions and 41 deletions

View File

@@ -4,7 +4,7 @@ import twitchio
from twitchio import PartialUser, Scopes, eventsub
from twitchio.ext import commands as cmds
from datamodels import BotChannel, Communities, UserProfile
from botdata import BotChannel
from meta import Bot
from utils.lib import utc_now
@@ -16,7 +16,6 @@ class TrackerComponent(cmds.Component):
def __init__(self, bot: Bot):
self.bot = bot
self.data = bot.dbconn.load_registry(EventData())
print(self.__all_listeners__)
# One command, which sends join link to start tracking
# Utility for fetch_or_create community and profiles and setting names
@@ -25,6 +24,7 @@ class TrackerComponent(cmds.Component):
# ----- API -----
async def component_load(self):
await self.data.init()
await self.bot.version_check(*self.data.VERSION)
async def component_teardown(self):
pass
@@ -131,11 +131,9 @@ class TrackerComponent(cmds.Component):
async def event_custom_redemption_add(self, payload: twitchio.ChannelPointsRedemptionAdd):
tracked = await TrackingChannel.fetch(payload.broadcaster.id)
if tracked and tracked.joined:
community = await self.bot.community_fetch(twitchid=payload.broadcaster.id, name=payload.broadcaster.name)
community = await self.bot.profiles.fetch_community(payload.broadcaster)
cid = community.communityid
profile = await self.bot.profile_fetch(
twitchid=payload.user.id, name=payload.user.name,
)
profile = await self.bot.profiles.fetch_profile(payload.user)
pid = profile.profileid
event_row = await self.data.events.insert(
@@ -160,11 +158,9 @@ class TrackerComponent(cmds.Component):
async def event_custom_redemption_update(self, payload: twitchio.ChannelPointsRedemptionUpdate):
tracked = await TrackingChannel.fetch(payload.broadcaster.id)
if tracked and tracked.joined:
community = await self.bot.community_fetch(twitchid=payload.broadcaster.id, name=payload.broadcaster.name)
community = await self.bot.profiles.fetch_community(payload.broadcaster)
cid = community.communityid
profile = await self.bot.profile_fetch(
twitchid=payload.user.id, name=payload.user.name,
)
profile = await self.bot.profiles.fetch_profile(payload.user)
pid = profile.profileid
event_row = await self.data.events.insert(
@@ -188,11 +184,9 @@ class TrackerComponent(cmds.Component):
async def event_follow(self, payload: twitchio.ChannelFollow):
tracked = await TrackingChannel.fetch(payload.broadcaster.id)
if tracked and tracked.joined:
community = await self.bot.community_fetch(twitchid=payload.broadcaster.id, name=payload.broadcaster.name)
community = await self.bot.profiles.fetch_community(payload.broadcaster)
cid = community.communityid
profile = await self.bot.profile_fetch(
twitchid=payload.user.id, name=payload.user.name,
)
profile = await self.bot.profiles.fetch_profile(payload.user)
pid = profile.profileid
# Computer follower count
@@ -214,11 +208,9 @@ class TrackerComponent(cmds.Component):
async def event_bits_use(self, payload: twitchio.ChannelBitsUse):
tracked = await TrackingChannel.fetch(payload.broadcaster.id)
if tracked and tracked.joined:
community = await self.bot.community_fetch(twitchid=payload.broadcaster.id, name=payload.broadcaster.name)
community = await self.bot.profiles.fetch_community(payload.broadcaster)
cid = community.communityid
profile = await self.bot.profile_fetch(
twitchid=payload.user.id, name=payload.user.name,
)
profile = await self.bot.profiles.fetch_profile(payload.user)
pid = profile.profileid
event_row = await self.data.events.insert(
@@ -241,11 +233,9 @@ class TrackerComponent(cmds.Component):
async def event_subscription(self, payload: twitchio.ChannelSubscribe):
tracked = await TrackingChannel.fetch(payload.broadcaster.id)
if tracked and tracked.joined:
community = await self.bot.community_fetch(twitchid=payload.broadcaster.id, name=payload.broadcaster.name)
community = await self.bot.profiles.fetch_community(payload.broadcaster)
cid = community.communityid
profile = await self.bot.profile_fetch(
twitchid=payload.user.id, name=payload.user.name,
)
profile = await self.bot.profiles.fetch_profile(payload.user)
pid = profile.profileid
event_row = await self.data.events.insert(
@@ -266,12 +256,10 @@ class TrackerComponent(cmds.Component):
async def event_subscription_gift(self, payload: twitchio.ChannelSubscriptionGift):
tracked = await TrackingChannel.fetch(payload.broadcaster.id)
if tracked and tracked.joined:
community = await self.bot.community_fetch(twitchid=payload.broadcaster.id, name=payload.broadcaster.name)
community = await self.bot.profiles.fetch_community(payload.broadcaster)
cid = community.communityid
if payload.user is not None:
profile = await self.bot.profile_fetch(
twitchid=payload.user.id, name=payload.user.name,
)
profile = await self.bot.profiles.fetch_profile(payload.user)
pid = profile.profileid
else:
pid = None
@@ -294,11 +282,9 @@ class TrackerComponent(cmds.Component):
async def event_subscription_message(self, payload: twitchio.ChannelSubscriptionMessage):
tracked = await TrackingChannel.fetch(payload.broadcaster.id)
if tracked and tracked.joined:
community = await self.bot.community_fetch(twitchid=payload.broadcaster.id, name=payload.broadcaster.name)
community = await self.bot.profiles.fetch_community(payload.broadcaster)
cid = community.communityid
profile = await self.bot.profile_fetch(
twitchid=payload.user.id, name=payload.user.name,
)
profile = await self.bot.profiles.fetch_profile(payload.user)
pid = profile.profileid
event_row = await self.data.events.insert(
@@ -322,7 +308,7 @@ class TrackerComponent(cmds.Component):
async def event_stream_online(self, payload: twitchio.StreamOnline):
tracked = await TrackingChannel.fetch(payload.broadcaster.id)
if tracked and tracked.joined:
community = await self.bot.community_fetch(twitchid=payload.broadcaster.id, name=payload.broadcaster.name)
community = await self.bot.profiles.fetch_community(payload.broadcaster)
cid = community.communityid
event_row = await self.data.events.insert(
@@ -341,7 +327,7 @@ class TrackerComponent(cmds.Component):
async def event_stream_offline(self, payload: twitchio.StreamOffline):
tracked = await TrackingChannel.fetch(payload.broadcaster.id)
if tracked and tracked.joined:
community = await self.bot.community_fetch(twitchid=payload.broadcaster.id, name=payload.broadcaster.name)
community = await self.bot.profiles.fetch_community(payload.broadcaster)
cid = community.communityid
event_row = await self.data.events.insert(
@@ -369,7 +355,7 @@ class TrackerComponent(cmds.Component):
async def _event_raid_out(self, broadcaster: PartialUser, to_broadcaster: PartialUser, viewer_count: int):
tracked = await TrackingChannel.fetch(broadcaster.id)
if tracked and tracked.joined:
community = await self.bot.community_fetch(twitchid=broadcaster.id, name=broadcaster.name)
community = await self.bot.profiles.fetch_community(broadcaster)
cid = community.communityid
event_row = await self.data.events.insert(
@@ -387,7 +373,7 @@ class TrackerComponent(cmds.Component):
async def _event_raid_in(self, broadcaster: PartialUser, from_broadcaster: PartialUser, viewer_count: int):
tracked = await TrackingChannel.fetch(broadcaster.id)
if tracked and tracked.joined:
community = await self.bot.community_fetch(twitchid=broadcaster.id, name=broadcaster.name)
community = await self.bot.profiles.fetch_community(broadcaster)
cid = community.communityid
event_row = await self.data.events.insert(
@@ -406,11 +392,9 @@ class TrackerComponent(cmds.Component):
async def event_message(self, payload: twitchio.ChatMessage):
tracked = await TrackingChannel.fetch(payload.broadcaster.id)
if tracked and tracked.joined:
community = await self.bot.community_fetch(twitchid=payload.broadcaster.id, name=payload.broadcaster.name)
community = await self.bot.profiles.fetch_community(payload.broadcaster)
cid = community.communityid
profile = await self.bot.profile_fetch(
twitchid=payload.chatter.id, name=payload.chatter.name,
)
profile = await self.bot.profiles.fetch_profile(payload.chatter)
pid = profile.profileid
event_row = await self.data.events.insert(