use branded types for messageType determination

This commit is contained in:
2023-07-05 22:54:43 +02:00
parent 1a13638ed9
commit 8c3cf7829b
4 changed files with 18 additions and 9 deletions

View File

@ -1,11 +1,20 @@
import { Message } from "discord.js";
export function messageIsVoteMessage(msg: Message): boolean {
// branded types to differentiate objects of identical Type but different contents
export type VoteEndMessage = Message & { readonly __brand: 'vote' }
export type AnnouncementMessage = Message & { readonly __brand: 'announcement' }
export type VoteMessage = Message & { readonly __brand: 'voteend' }
export type DiscordMessage = VoteMessage | VoteEndMessage | AnnouncementMessage
export function isVoteMessage(msg: Message): msg is VoteMessage {
return msg.cleanContent.includes('[Abstimmung]')
}
export function messageIsInitialAnnouncement(msg: Message): boolean {
export function isInitialAnnouncement(msg: Message): msg is AnnouncementMessage {
return msg.cleanContent.includes("[initial]")
}
export function messageIsVoteEndedMessage(msg: Message): boolean {
export function isVoteEndedMessage(msg: Message): msg is VoteEndMessage {
return msg.cleanContent.includes("[Abstimmung beendet]")
}