Skip to content

Commit

Permalink
Refactor guild finding code (discord) (#1319)
Browse files Browse the repository at this point in the history
  • Loading branch information
qaisjp committed Dec 3, 2020
1 parent 44d182e commit c42167c
Showing 1 changed file with 35 additions and 18 deletions.
53 changes: 35 additions & 18 deletions bridge/discord/discord.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package bdiscord

import (
"bytes"
"errors"
"fmt"
"strings"
"sync"
Expand Down Expand Up @@ -50,7 +49,6 @@ func New(cfg *bridge.Config) bridge.Bridger {

func (b *Bdiscord) Connect() error {
var err error
var guildFound bool
token := b.GetString("Token")
b.Log.Info("Connecting")
if b.GetString("WebhookURL") == "" {
Expand Down Expand Up @@ -94,29 +92,48 @@ func (b *Bdiscord) Connect() error {
serverName := strings.Replace(b.GetString("Server"), "ID:", "", -1)
b.nick = userinfo.Username
b.userID = userinfo.ID

// Try and find this account's guild, and populate channels
b.channelsMutex.Lock()
for _, guild := range guilds {
if guild.Name == serverName || guild.ID == serverName {
b.channels, err = b.c.GuildChannels(guild.ID)
if err != nil {
break
}
b.guildID = guild.ID
guildFound = true
// Skip, if the server name does not match the visible name or the ID
if guild.Name != serverName && guild.ID != serverName {
continue
}

// Complain about an ambiguous Server setting. Two Discord servers could have the same title!
// For IDs, practically this will never happen. It would only trigger if some server's name is also an ID.
if b.guildID != "" {
return fmt.Errorf("found multiple Discord servers with the same name %#v, expected to see only one", serverName)
}

// Getting this guild's channel could result in a permission error
b.channels, err = b.c.GuildChannels(guild.ID)
if err != nil {
return fmt.Errorf("could not get %#v's channels: %w", b.GetString("Server"), err)
}

b.guildID = guild.ID
}
b.channelsMutex.Unlock()
if !guildFound {
msg := fmt.Sprintf("Server \"%s\" not found", b.GetString("Server"))
err = errors.New(msg)
b.Log.Error(msg)
b.Log.Info("Possible values:")

// If we couldn't find a guild, we print extra debug information and return a nice error
if b.guildID == "" {
err = fmt.Errorf("could not find Discord server %#v", b.GetString("Server"))
b.Log.Error(err.Error())

// Print all of the possible server values
b.Log.Info("Possible server values:")
for _, guild := range guilds {
b.Log.Infof("Server=\"%s\" # Server name", guild.Name)
b.Log.Infof("Server=\"%s\" # Server ID", guild.ID)
b.Log.Infof("\t- Server=%#v # by name", guild.Name)
b.Log.Infof("\t- Server=%#v # by ID", guild.ID)
}
}
if err != nil {

// If there are no results, we should say that
if len(guilds) == 0 {
b.Log.Info("\t- (none found)")
}

return err
}

Expand Down

0 comments on commit c42167c

Please sign in to comment.