71 lines
1.8 KiB
Go
71 lines
1.8 KiB
Go
package chat
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
twitch "github.com/gempir/go-twitch-irc/v4"
|
|
"streambot/internal/commands"
|
|
)
|
|
|
|
const (
|
|
MatchPrefix = "prefix"
|
|
MatchMention = "mention"
|
|
MatchContains = "contains"
|
|
)
|
|
|
|
func messageMatchesCommand(message, botUserName string, cmd commands.CustomCommand) bool {
|
|
msgLower := strings.ToLower(message)
|
|
triggerLower := strings.ToLower(cmd.Trigger)
|
|
botMention := "@" + strings.ToLower(botUserName)
|
|
|
|
switch cmd.Match {
|
|
case MatchPrefix:
|
|
return strings.HasPrefix(msgLower, triggerLower)
|
|
case MatchMention:
|
|
return strings.Contains(msgLower, botMention) && strings.Contains(msgLower, triggerLower)
|
|
case MatchContains:
|
|
return strings.Contains(msgLower, triggerLower)
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
func userHasPermisson(user twitch.User, required commands.PermissionLevel) bool {
|
|
isStreamer := use.Badges["broadcaster"] == 1
|
|
isModerator := user.Badges["moderator"] == 1
|
|
isVIP := user.Badges["vip"] == 1
|
|
|
|
switch required {
|
|
case commands.PermissionEveryone:
|
|
return true
|
|
case commands.PermissionVIP:
|
|
return isStreamer || isModerator || is VIP
|
|
case commands.PermissionModerator:
|
|
return isStreamer || isModerator
|
|
case commands.PermissionStreamer:
|
|
return isStreamer
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
func HandleMessage(client *twitch.Client, apiClient interface{}, message twitch.PrivateMessage, botUserName string) {
|
|
user := message.User
|
|
msg := message.Message
|
|
channel := message.Channel
|
|
|
|
// uptime title game handlers etc. . .
|
|
|
|
for _, cmd := range commands.GetAllCommands() {
|
|
if messageMatchesCommand(msg, botName, cmd) {
|
|
if userHasPermission(user, cmd.Permission) {
|
|
client.Say(channel, cmd.Reply)
|
|
} else {
|
|
client.Say(channel, fmt.Sprintf("@%s You don't have permission to use this command.", user.DisplayName))
|
|
}
|
|
break
|
|
}
|
|
}
|
|
}
|