// +build integration package api import ( "fmt" "log" "os" "testing" "time" "github.com/diamondburned/arikawa/discord" ) type testConfig struct { BotToken string ChannelID discord.ChannelID } func mustConfig(t *testing.T) testConfig { var token = os.Getenv("BOT_TOKEN") if token == "" { t.Fatal("Missing $BOT_TOKEN") } var cid = os.Getenv("CHANNEL_ID") if cid == "" { t.Fatal("Missing $CHANNEL_ID") } id, err := discord.ParseSnowflake(cid) if err != nil { t.Fatal("Invalid $CHANNEL_ID:", err) } return testConfig{ BotToken: token, ChannelID: discord.ChannelID(id), } } func TestIntegration(t *testing.T) { cfg := mustConfig(t) client := NewClient("Bot " + cfg.BotToken) // Simple GET request u, err := client.Me() if err != nil { t.Fatal("Can't get self:", err) } log.Println("API user:", u.Username) // POST with URL param and paginator _, err = client.Guilds(100) if err != nil { t.Fatal("Can't get guilds:", err) } } var emojisToSend = [...]string{ "πŸ₯Ί", "❀", "πŸ˜‚", "πŸ₯°", "😊", "πŸ”₯", "βœ”", "πŸ‘", "😍", "🐻", "🀯", "πŸ”£", "πŸ”", "🎌", "πŸ‡―πŸ‡΅", "πŸŽ₯", "πŸ‡ΊπŸ‡Έ", "🌎", } func TestReactions(t *testing.T) { cfg := mustConfig(t) client := NewClient("Bot " + cfg.BotToken) msg := fmt.Sprintf("This is a message sent at %v.", time.Now()) // Send a new message. m, err := client.SendMessage(cfg.ChannelID, msg, nil) if err != nil { t.Fatal("Failed to send message:", err) } now := time.Now() for _, emojiString := range emojisToSend { if err := client.React(cfg.ChannelID, m.ID, emojiString); err != nil { t.Fatal("Failed to send emoji "+emojiString+":", err) } } msg += fmt.Sprintf(" Total time taken to send all reactions: %v.", time.Now().Sub(now)) m, err = client.EditMessage(cfg.ChannelID, m.ID, msg, nil, false) if err != nil { t.Fatal("Failed to edit message:", err) } }