From 1b5987275a069dfb075a9699247f0b27903043e2 Mon Sep 17 00:00:00 2001 From: Matthieu Lalonde Date: Wed, 27 Jan 2021 20:30:28 +0000 Subject: [PATCH] Verify discord channel type on join, fixes issue #8 --- pkg/discord/discord.go | 14 ++++++++++++++ pkg/utils/utils.go | 12 ++++++++++++ 2 files changed, 26 insertions(+) diff --git a/pkg/discord/discord.go b/pkg/discord/discord.go index 5d8fd0a..d016547 100644 --- a/pkg/discord/discord.go +++ b/pkg/discord/discord.go @@ -12,6 +12,7 @@ import ( "os" "git.lalonde.me/matth/AltVRBot/pkg/discord/mux" + "git.lalonde.me/matth/AltVRBot/pkg/utils" "github.com/bwmarrin/discordgo" ) @@ -27,6 +28,10 @@ type Discord struct { User *discordgo.User } +var ( + allowedChannelTypes = []discordgo.ChannelType{discordgo.ChannelTypeGuildText, discordgo.ChannelTypeDM, discordgo.ChannelTypeGroupDM} +) + // New instanciates a new discord bot func New(token, sID, cID string) (*Discord, error) { dg := &Discord{ @@ -49,6 +54,15 @@ func New(token, sID, cID string) (*Discord, error) { dg.Session = session + c, err := dg.Session.Channel(cID) + if err != nil { + log.Fatalf("Invalid channel ID: %+v\n", err) + } + + if !utils.SliceContainsChannelType(allowedChannelTypes, c.Type) { + log.Fatalf("Cannot join channel, invalid channel type") + } + dg.addHandlers() // Open a websocket connection to Discord diff --git a/pkg/utils/utils.go b/pkg/utils/utils.go index 5fa7ff7..dd005e1 100644 --- a/pkg/utils/utils.go +++ b/pkg/utils/utils.go @@ -1,5 +1,7 @@ package utils +import "github.com/bwmarrin/discordgo" + // TruncateString UTF8 truncation of string to `i` length func TruncateString(s string, i int) string { runes := []rune(s) @@ -8,3 +10,13 @@ func TruncateString(s string, i int) string { } return s } + +// SliceContainsChannelType looks for int value in a slice +func SliceContainsChannelType(s []discordgo.ChannelType, e discordgo.ChannelType) bool { + for _, a := range s { + if a == e { + return true + } + } + return false +}