package thulani import ( "encoding/json" "os" "net/url" "strconv" "sync" "github.com/bwmarrin/discordgo" "github.com/op/go-logging" ) const help = `wew lad. you should know these commands already. Usage: ` + "`!thulani [command]`" + ` commands: **help**: print this help message **[url]**: a url with media that thulani can play. queued up to play after everything that's already waiting. **list, queue**: list items in the queue, as well as the currently-playing item. **pause**: pause sound. **resume**: resume sound. **die**: empty the queue and stop playing. **skip**: skip the current item. ` var log = logging.MustGetLogger("thulani") type Config struct { Trigger string `json:"trigger"` QueueSize uint `json:"queue_size"` Admin uint `json:"admin"` OpRole string `json:"op_role"` Server string `json:"server"` VoiceChannel string `json:"voice_channel"` Token string `json:"token"` ClientID string `json:"client_id"` ClientSecret string `json:"client_secret"` } func handle(err error) { if err != nil { log.Fatal(err) } } func LoadConfig(filename string) (*Config, error) { file, err := os.Open("config.json") if err != nil { return nil, err } var conf Config err = json.NewDecoder(file).Decode(&conf) return &conf, err } var _oauthUrl string var oauthOnce sync.Once const requestedPerms = discordgo.PermissionEmbedLinks | discordgo.PermissionReadMessages | discordgo.PermissionAddReactions | discordgo.PermissionSendMessages | discordgo.PermissionSendTTSMessages | discordgo.PermissionMentionEveryone | discordgo.PermissionUseExternalEmojis | discordgo.PermissionVoiceConnect | discordgo.PermissionVoiceSpeak | discordgo.PermissionChangeNickname | discordgo.PermissionVoiceUseVAD | discordgo.PermissionAttachFiles func oauthUrl() string { oauthOnce.Do(func() { oUrl, err := url.Parse("https://discordapp.com/api/oauth2/authorize") if err != nil { panic(err) } q := oUrl.Query() q.Add("scope", "bot") q.Add("permissions", strconv.Itoa(requestedPerms)) q.Add("client_id", config.ClientID) oUrl.RawQuery = q.Encode() _oauthUrl = oUrl.String() }) return _oauthUrl }