Add more event types.
This commit is contained in:
@@ -113,7 +113,7 @@ CREATE TABLE events(
|
||||
communityid INTEGER NOT NULL REFERENCES communities (communityid),
|
||||
channel_id TEXT NOT NULL,
|
||||
profileid INTEGER REFERENCES user_profiles (profileid),
|
||||
user_id TEXT NOT NULL,
|
||||
user_id TEXT,
|
||||
occurred_at TIMESTAMPTZ,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
UNIQUE (event_id, event_type)
|
||||
@@ -158,7 +158,7 @@ CREATE TABLE subscribe_message_events(
|
||||
tier INTEGER NOT NULL,
|
||||
duration_months INTEGER NOT NULL,
|
||||
cumulative_months INTEGER NOT NULL,
|
||||
streak_months INTEGER NOT NULL,
|
||||
streak_months INTEGER,
|
||||
message TEXT,
|
||||
FOREIGN KEY (event_id, event_type) REFERENCES events (event_id, event_type)
|
||||
);
|
||||
@@ -256,7 +256,7 @@ CREATE TABLE raid_out_events(
|
||||
event_id INTEGER PRIMARY KEY REFERENCES events (event_id),
|
||||
event_type TEXT NOT NULL DEFAULT 'raidout' CHECK (event_type = 'raidout'),
|
||||
target_id TEXT NOT NULL,
|
||||
target_name TEXT NOT NULL,
|
||||
target_name TEXT,
|
||||
viewer_count INTEGER NOT NULL,
|
||||
FOREIGN KEY (event_id, event_type) REFERENCES events (event_id, event_type)
|
||||
);
|
||||
@@ -265,7 +265,7 @@ CREATE TABLE raid_in_events(
|
||||
event_id INTEGER PRIMARY KEY REFERENCES events (event_id),
|
||||
event_type TEXT NOT NULL DEFAULT 'raidin' CHECK (event_type = 'raidin'),
|
||||
source_id TEXT NOT NULL,
|
||||
source_name TEXT NOT NULL,
|
||||
source_name TEXT,
|
||||
viewer_count INTEGER NOT NULL,
|
||||
FOREIGN KEY (event_id, event_type) REFERENCES events (event_id, event_type)
|
||||
);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
from typing import Optional
|
||||
import random
|
||||
import twitchio
|
||||
from twitchio import Scopes, eventsub
|
||||
from twitchio import PartialUser, Scopes, eventsub
|
||||
from twitchio.ext import commands as cmds
|
||||
|
||||
from datamodels import BotChannel, Communities, UserProfile
|
||||
@@ -333,6 +333,79 @@ class TrackerComponent(cmds.Component):
|
||||
stream_type=payload.type,
|
||||
)
|
||||
|
||||
@cmds.Component.listener()
|
||||
async def event_raid(self, payload: twitchio.ChannelRaid):
|
||||
await self._event_raid_out(
|
||||
payload.from_broadcaster,
|
||||
payload.to_broadcaster,
|
||||
payload.viewer_count,
|
||||
)
|
||||
await self._event_raid_in(
|
||||
payload.to_broadcaster,
|
||||
payload.from_broadcaster,
|
||||
payload.viewer_count,
|
||||
)
|
||||
|
||||
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 Communities.fetch_or_create(twitchid=broadcaster.id, name=broadcaster.name)
|
||||
cid = community.communityid
|
||||
|
||||
event_row = await self.data.events.insert(
|
||||
event_type='raidout',
|
||||
communityid=cid,
|
||||
channel_id=broadcaster.id,
|
||||
)
|
||||
detail_row = await self.data.raid_out_events.insert(
|
||||
event_id=event_row['event_id'],
|
||||
target_id=to_broadcaster.id,
|
||||
target_name=to_broadcaster.name,
|
||||
viewer_count=viewer_count
|
||||
)
|
||||
|
||||
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 Communities.fetch_or_create(twitchid=broadcaster.id, name=broadcaster.name)
|
||||
cid = community.communityid
|
||||
|
||||
event_row = await self.data.events.insert(
|
||||
event_type='raidin',
|
||||
communityid=cid,
|
||||
channel_id=broadcaster.id,
|
||||
)
|
||||
detail_row = await self.data.raid_in_events.insert(
|
||||
event_id=event_row['event_id'],
|
||||
source_id=from_broadcaster.id,
|
||||
source_name=from_broadcaster.name,
|
||||
viewer_count=viewer_count
|
||||
)
|
||||
|
||||
async def event_message(self, payload: twitchio.ChatMessage):
|
||||
tracked = await TrackingChannel.fetch(payload.broadcaster.id)
|
||||
if tracked and tracked.joined:
|
||||
community = await Communities.fetch_or_create(twitchid=payload.broadcaster.id, name=payload.broadcaster.name)
|
||||
cid = community.communityid
|
||||
profile = await UserProfile.fetch_or_create(
|
||||
twitchid=payload.chatter.id, name=payload.chatter.name,
|
||||
)
|
||||
pid = profile.profileid
|
||||
|
||||
event_row = await self.data.events.insert(
|
||||
event_type='message',
|
||||
communityid=cid,
|
||||
channel_id=payload.broadcaster.id,
|
||||
profileid=pid,
|
||||
user_id=payload.chatter.id,
|
||||
)
|
||||
detail_row = await self.data.message_events.insert(
|
||||
event_id=event_row['event_id'],
|
||||
message_id=payload.id,
|
||||
message_type=payload.type,
|
||||
content=payload.text,
|
||||
source_channel_id=payload.source_id
|
||||
)
|
||||
|
||||
# ----- Commands -----
|
||||
@cmds.command(name='starttracking')
|
||||
|
||||
@@ -18,9 +18,11 @@ class EventData(Registry):
|
||||
events = Table('events')
|
||||
follow_events = Table('follow_events')
|
||||
bits_events = Table('bits_events')
|
||||
|
||||
subscribe_events = Table('subscribe_events')
|
||||
gift_events = Table('gift_events')
|
||||
subscribe_message_events = Table('subscribe_message_events')
|
||||
|
||||
cheer_events = Table('cheer_events')
|
||||
redemption_add_events = Table('redemption_add_events')
|
||||
redemption_update_events = Table('redemption_update_events')
|
||||
@@ -28,8 +30,10 @@ class EventData(Registry):
|
||||
stream_online_events = Table('stream_online_events')
|
||||
stream_offline_events = Table('stream_offline_events')
|
||||
channel_update_events = Table('channel_update_events')
|
||||
|
||||
vip_add_events = Table('vip_add_events')
|
||||
vip_remove_events = Table('vip_remove_events')
|
||||
|
||||
raid_out_events = Table('raid_out_events')
|
||||
raid_in_events = Table('raid_in_events')
|
||||
message_events = Table('message_events')
|
||||
|
||||
Reference in New Issue
Block a user