From 3867694f6f9f06d0be9b8f100a71015fb2c3b5c7 Mon Sep 17 00:00:00 2001 From: Bryan Wood Date: Tue, 5 Mar 2024 11:56:49 -0800 Subject: [PATCH] Add `RaidEventHandler` event sub to bot --- bot/chat-bot.ts | 17 ++++++++++++ bot/event-sub-handlers/index.ts | 2 ++ bot/event-sub-handlers/raid-event.handler.ts | 28 ++++++++++++++++++++ dependency-management/inversify.config.ts | 2 ++ 4 files changed, 49 insertions(+) create mode 100644 bot/event-sub-handlers/raid-event.handler.ts diff --git a/bot/chat-bot.ts b/bot/chat-bot.ts index 43413f7..f47114e 100644 --- a/bot/chat-bot.ts +++ b/bot/chat-bot.ts @@ -19,6 +19,7 @@ import { EventSubChannelCheerEvent, EventSubChannelFollowEvent, EventSubChannelModeratorEvent, + EventSubChannelRaidEvent, EventSubChannelRedemptionAddEvent, EventSubChannelUnbanEvent, EventSubStreamOfflineEvent, @@ -39,6 +40,7 @@ import { CheerEventHandler, FollowerEventHandler, ModeratorEventHandler, + RaidEventHandler, StreamEventHandler, } from './event-sub-handlers'; import InjectionTypes from '../dependency-management/types'; @@ -57,6 +59,7 @@ export default class ChatBot { @inject(CheerEventHandler) private cheerEventHandler: CheerEventHandler, @inject(FollowerEventHandler) private followerEventHandler: FollowerEventHandler, @inject(ModeratorEventHandler) private moderatorEventHandler: ModeratorEventHandler, + @inject(RaidEventHandler) private raidEventHandler: RaidEventHandler, @inject(StreamEventHandler) private streamEventHandler: StreamEventHandler, @inject(InjectionTypes.Logger) private logger: winston.Logger, ) { @@ -156,6 +159,20 @@ export default class ChatBot { }, ); + this.eventSubWsListener.onChannelRaidTo( + environment.twitchBot.broadcaster.id, + (event: EventSubChannelRaidEvent): void => { + this.raidEventHandler.raid(event); + }, + ); + + this.eventSubWsListener.onChannelRaidFrom( + environment.twitchBot.broadcaster.id, + (event: EventSubChannelRaidEvent): void => { + this.raidEventHandler.raid(event); + }, + ); + this.eventSubWsListener.onStreamOnline( environment.twitchBot.broadcaster.id, (event: EventSubStreamOnlineEvent): void => { diff --git a/bot/event-sub-handlers/index.ts b/bot/event-sub-handlers/index.ts index 8b60efa..8063191 100644 --- a/bot/event-sub-handlers/index.ts +++ b/bot/event-sub-handlers/index.ts @@ -3,6 +3,7 @@ import ChannelPointEventHandler from './channel-point-event.handler'; import CheerEventHandler from './cheer-event.handler'; import FollowerEventHandler from './follow-event.handler'; import ModeratorEventHandler from './moderator-event.handler'; +import RaidEventHandler from './raid-event.handler'; import StreamEventHandler from './stream-event.handler'; export { @@ -11,5 +12,6 @@ export { CheerEventHandler, FollowerEventHandler, ModeratorEventHandler, + RaidEventHandler, StreamEventHandler, }; diff --git a/bot/event-sub-handlers/raid-event.handler.ts b/bot/event-sub-handlers/raid-event.handler.ts new file mode 100644 index 0000000..4d6d4bf --- /dev/null +++ b/bot/event-sub-handlers/raid-event.handler.ts @@ -0,0 +1,28 @@ +import { EventSubChannelRaidEvent } from '@twurple/eventsub-base'; +import { inject, injectable } from 'inversify'; +import winston from 'winston'; +import InjectionTypes from '../../dependency-management/types'; +import { FollowEvent, RaidEvent } from '../../database'; + +@injectable() +export default class RaidEventHandler { + constructor( + @inject(InjectionTypes.Logger) private logger: winston.Logger, + ) { + } + + /** + * Records the event of a user being added as a moderator to the channel + * @param event Raid Event + */ + async raid(event: EventSubChannelRaidEvent): Promise { + return RaidEvent + .raid(event) + .catch((reason: any) => { + this.logger.error(`Unable to store Raid event in DB >> ${reason}`); + }) + .then(() => { + this.logger.info(`${event.raidingBroadcasterDisplayName} raided ${event.raidedBroadcasterDisplayName} on ${(new Date()).toDateString()}`); + }); + } +} diff --git a/dependency-management/inversify.config.ts b/dependency-management/inversify.config.ts index d0dbc2e..604dd70 100644 --- a/dependency-management/inversify.config.ts +++ b/dependency-management/inversify.config.ts @@ -55,6 +55,7 @@ import { CheerEventHandler, FollowerEventHandler, ModeratorEventHandler, + RaidEventHandler, StreamEventHandler, } from '../bot/event-sub-handlers'; import Broadcaster from '../bot/utilities/broadcaster'; @@ -117,6 +118,7 @@ SAContainer.bind(ChannelPointEventHandler).toSelf(); SAContainer.bind(CheerEventHandler).toSelf(); SAContainer.bind(FollowerEventHandler).toSelf(); SAContainer.bind(ModeratorEventHandler).toSelf(); +SAContainer.bind(RaidEventHandler).toSelf(); SAContainer.bind(StreamEventHandler).toSelf(); // Bind dependencies to container