async def handleEvent(self, twitchChannel: Channel, twitchUser: User, tags: Dict[str, Any]) -> bool: if twitchChannel is None: raise ValueError( f'twitchChannel argument is malformed: \"{twitchChannel}\"') elif twitchUser is None: raise ValueError( f'twitchUser argument is malformed: \"{twitchUser}\"') elif tags is None: raise ValueError(f'tags argument is malformed: \"{tags}\"') generalSettings = await self.__generalSettingsRepository.getAllAsync() if not generalSettings.isRaidLinkMessagingEnabled(): return False elif not twitchUser.isRaidLinkMessagingEnabled(): return False raidedByName = tags.get('msg-param-displayName') if not utils.isValidStr(raidedByName): raidedByName = tags.get('display-name') if not utils.isValidStr(raidedByName): raidedByName = tags.get('login') if not utils.isValidStr(raidedByName): self.__timber.log( 'RaidEvent', f'{twitchUser.getHandle()} was raided, but the tags dictionary seems to have strange values: {tags}' ) return False messageSuffix = f'😻 Raiders, if you could, I\'d really appreciate you clicking this link to watch the stream. It helps me on my path to partner. {twitchUser.getTwitchUrl()} Thank you! ✨' raidSize = utils.getIntFromDict(tags, 'msg-param-viewerCount', -1) message: str = None if raidSize >= 10: raidSizeStr = locale.format_string("%d", raidSize, grouping=True) message = f'Thank you for the raid of {raidSizeStr} {raidedByName}! {messageSuffix}' else: message = f'Thank you for the raid {raidedByName}! {messageSuffix}' delaySeconds = generalSettings.getRaidLinkMessagingDelay() self.__eventLoop.create_task( twitchUtils.waitThenSend(messageable=twitchChannel, delaySeconds=delaySeconds, message=message)) self.__timber.log( 'RaidEvent', f'{twitchUser.getHandle()} received raid of {raidSize} from {raidedByName}!' ) return True