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  }