package main import ( "strconv" "strings" "github.com/bwmarrin/discordgo" ) //ParseForCommands parses input for Commands, returns message if no command specified, else return is empty func ParseForCommands(line string) string { if len(line) < 2 { return line } switch line[:2] { case ":?": // Show help menu Msg(TextMsg, "Commands: ") Msg(TextMsg, "[:g] - Select guild") Msg(TextMsg, "[:p] - Select private message") Msg(TextMsg, "[:c] - Select guild channel") Msg(TextMsg, "[:c ?] - List guild channels") Msg(TextMsg, "[:c ] - Go directly to channel") Msg(TextMsg, "[:m ] - Display last messages") Msg(TextMsg, "[:u ] - Change username") case ":g": SelectGuild() return "" case ":p": SelectPrivate() return "" case ":c": opts := strings.Split(line, " ") if len(opts) == 1 { SelectChannel() return "" } selectID := 0 if opts[1] == "?" { for _, channel := range State.Channels { if channel.Type == 0 { Msg(TextMsg, "[%d] %s\n", selectID, channel.Name) selectID++ } } return "" } selectMap := make(map[int]*discordgo.Channel) for _, channel := range State.Channels { if channel.Type == 0 { selectMap[selectID] = channel selectID++ } } selection, err := strconv.Atoi(opts[1]) if err != nil { Msg(ErrorMsg, "[:c] Argument Error: %s\n", err) return "" } if len(State.Channels) < selection || selection < 0 { Msg(ErrorMsg, "[:c] Argument Error: Out of bounds\n") return "" } channel := selectMap[selection] State.SetChannel(channel.ID) ShowContent() return "" case ":m": AmountStr := strings.Split(line, " ") if len(AmountStr) < 2 { Msg(ErrorMsg, "[:m] No Arguments \n") return "" } Amount, err := strconv.Atoi(AmountStr[1]) if err != nil { Msg(ErrorMsg, "[:m] Argument Error: %s \n", err) return "" } Msg(InfoMsg, "Printing last %d messages!\n", Amount) State.RetrieveMessages(Amount) PrintMessages(Amount) return line case ":u": session := State.Session user := session.User newName := strings.TrimPrefix(line, ":u ") _, err := State.Session.DiscordGo.UserUpdate(user.Email, session.Password, newName, user.Avatar, "") if err != nil { Msg(ErrorMsg, "[:u] Argument Error: %s\n", err) } return line } return line } //SelectGuild selects a new Guild func SelectGuild() { State.Enabled = false SelectGuildMenu() // Segfaults would happen here SelectChannelMenu() State.Enabled = true ShowContent() } //AddUserChannel moves a user to a private channel with another user. func AddUserChannel() { State.Enabled = false AddUserChannelMenu() State.Enabled = true ShowContent() } //SelectChannel selects a new Channel func SelectChannel() { State.Enabled = false SelectChannelMenu() State.Enabled = true ShowContent() } //SelectPrivate a private channel func SelectPrivate() { State.Enabled = false SelectPrivateMenu() State.Enabled = true ShowContent() } //SelectDeletePrivate a private channel func SelectDeletePrivate() { State.Enabled = false SelectDeletePrivateMenu() State.Enabled = true ShowContent() }