package main import ( "context" "encoding/json" "github.com/bwmarrin/discordgo" "github.com/bwmarrin/disgord/x/mux" "github.com/nishanths/go-xkcd" "io/ioutil" "log" "math/rand" "net/http" "os" "regexp" "strconv" ) //Check member roles func checkRole(s *discordgo.Session, m *discordgo.Message, ctx *mux.Context, roleid string) bool { if ctx.IsPrivate { return false } channel, _ := s.Channel(m.ChannelID) guild := channel.GuildID member, _ := s.GuildMember(guild, m.Author.ID) for _, role := range member.Roles { if role == roleid { return true } } return false } //Generate a heckin swear word func getSwear(s *discordgo.Session, m *discordgo.Message, ctx *mux.Context) { resp := "" swear, err := http.Get("https://swear.jawa.moe/") if err != nil { resp = "Error fetching swear: " + err.Error() } defer swear.Body.Close() if swear.StatusCode == http.StatusOK { body, err := ioutil.ReadAll(swear.Body) if err != nil { resp = "Error fetching swear: " + err.Error() } resp = string(body) } s.ChannelMessageSend(m.ChannelID, resp) } //Post the Maki Monday pic! func makiMonday(s *discordgo.Session, m *discordgo.Message, ctx *mux.Context) { resp := "https://maki.jawa.moe/monday.png" s.ChannelMessageSend(m.ChannelID, resp) } //Post link to mixes B) func postMixes(s *discordgo.Session, m *discordgo.Message, ctx *mux.Context) { resp := "https://maki.jawa.moe/mixes/" s.ChannelMessageSend(m.ChannelID, resp) } //Post a link to a random mix func getRandomMix(s *discordgo.Session, m *discordgo.Message, ctx *mux.Context) { //Define mix details type Mix struct { Name string `json:"name"` Type string `json:"type"` Mtime string `json:"mtime"` Size int `json:"size"` } mixresp, err := http.Get("https://maki.jawa.moe/mixesjson/") if err != nil { resp := "Error fetching mixes: " + err.Error() s.ChannelMessageSend(m.ChannelID, resp) return } defer mixresp.Body.Close() if mixresp.StatusCode == http.StatusOK { var mixes []*Mix err = json.NewDecoder(mixresp.Body).Decode(&mixes) rmix := mixes[rand.Intn(len(mixes))] resp := "https://maki.jawa.moe/mixes/" + rmix.Name s.ChannelMessageSend(m.ChannelID, resp) } } //Post XKCD comic! func getXKCD(s *discordgo.Session, m *discordgo.Message, ctx *mux.Context) { resp := "" xkclient := xkcd.NewClient() var err error var comic xkcd.Comic var arg string if len(ctx.Fields) > 1 { arg = ctx.Fields[1] } else { arg = "random" } matchedNum, _ := regexp.MatchString(`[0-9]+`, arg) if arg == "latest" { comic, err = xkclient.Latest(context.Background()) } else if matchedNum { comicNum, _ := strconv.Atoi(arg) comic, err = xkclient.Get(context.Background(), comicNum) } else { latestcomic, _ := xkclient.Latest(context.Background()) randcomic := rand.Intn(latestcomic.Number) comic, err = xkclient.Get(context.Background(), randcomic) } if err != nil { resp = err.Error() } resp = comic.ImageURL s.ChannelMessageSend(m.ChannelID, resp) } //Restart the bot func restartBot(s *discordgo.Session, m *discordgo.Message, ctx *mux.Context) { if !checkRole(s, m, ctx, bot_admin_role) { resp := "OwO you aren't my daddy..." s.ChannelMessageSend(m.ChannelID, resp) return } resp := "Goodnight ;-;" s.ChannelMessageSend(m.ChannelID, resp) Session.Close() log.Println("brb dying at the request of ", m.Author.String()) os.Exit(0) } //Morgana yells at you to sleep... func goToSleep(s *discordgo.Session, m *discordgo.Message, ctx *mux.Context) { embed := &discordgo.MessageEmbed{ Description: "Aren't you tired?\nLet's call it a day\nand get some sleep.", Thumbnail: &discordgo.MessageEmbedThumbnail{ URL: "https://cdn.discordapp.com/emojis/396429379686629378.png", }, Title: "Morgana", } s.ChannelMessageSendEmbed(m.ChannelID, embed) }