github.com/diamondburned/arikawa/v2@v2.1.0/_example/commands/main.go (about) 1 package main 2 3 import ( 4 "log" 5 "os" 6 7 "github.com/diamondburned/arikawa/v2/api" 8 "github.com/diamondburned/arikawa/v2/discord" 9 "github.com/diamondburned/arikawa/v2/gateway" 10 "github.com/diamondburned/arikawa/v2/session" 11 ) 12 13 // To run, do `APP_ID="APP ID" GUILD_ID="GUILD ID" BOT_TOKEN="TOKEN HERE" go run .` 14 15 func main() { 16 appID := discord.AppID(mustSnowflakeEnv("APP_ID")) 17 guildID := discord.GuildID(mustSnowflakeEnv("GUILD_ID")) 18 19 token := os.Getenv("BOT_TOKEN") 20 if token == "" { 21 log.Fatalln("No $BOT_TOKEN given.") 22 } 23 24 s, err := session.New("Bot " + token) 25 if err != nil { 26 log.Fatalln("Session failed:", err) 27 return 28 } 29 30 s.AddHandler(func(e *gateway.InteractionCreateEvent) { 31 data := api.InteractionResponse{ 32 Type: api.MessageInteractionWithSource, 33 Data: &api.InteractionResponseData{ 34 Content: "Pong!", 35 }, 36 } 37 38 if err := s.RespondInteraction(e.ID, e.Token, data); err != nil { 39 log.Println("failed to send interaction callback:", err) 40 } 41 }) 42 43 s.Gateway.AddIntents(gateway.IntentGuilds) 44 s.Gateway.AddIntents(gateway.IntentGuildMessages) 45 46 if err := s.Open(); err != nil { 47 log.Fatalln("failed to open:", err) 48 } 49 defer s.Close() 50 51 log.Println("Gateway connected. Getting all guild commands.") 52 53 commands, err := s.GuildCommands(appID, guildID) 54 if err != nil { 55 log.Fatalln("failed to get guild commands:", err) 56 } 57 58 for _, command := range commands { 59 log.Println("Existing command", command.Name, "found.") 60 } 61 62 newCommands := []api.CreateCommandData{ 63 { 64 Name: "ping", 65 Description: "Basic ping command.", 66 }, 67 } 68 69 for _, command := range newCommands { 70 _, err := s.CreateGuildCommand(appID, guildID, command) 71 if err != nil { 72 log.Fatalln("failed to create guild command:", err) 73 } 74 } 75 76 // Block forever. 77 select {} 78 } 79 80 func mustSnowflakeEnv(env string) discord.Snowflake { 81 s, err := discord.ParseSnowflake(os.Getenv(env)) 82 if err != nil { 83 log.Fatalf("Invalid snowflake for $%s: %v", env, err) 84 } 85 return s 86 }