summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/bwmarrin/discordgo/examples
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/bwmarrin/discordgo/examples')
-rw-r--r--vendor/github.com/bwmarrin/discordgo/examples/airhorn/main.go186
-rw-r--r--vendor/github.com/bwmarrin/discordgo/examples/appmaker/main.go98
-rw-r--r--vendor/github.com/bwmarrin/discordgo/examples/avatar/localfile/main.go73
-rw-r--r--vendor/github.com/bwmarrin/discordgo/examples/avatar/url/main.go86
-rw-r--r--vendor/github.com/bwmarrin/discordgo/examples/mytoken/main.go33
-rw-r--r--vendor/github.com/bwmarrin/discordgo/examples/new_basic/main.go58
-rw-r--r--vendor/github.com/bwmarrin/discordgo/examples/pingpong/main.go78
7 files changed, 612 insertions, 0 deletions
diff --git a/vendor/github.com/bwmarrin/discordgo/examples/airhorn/main.go b/vendor/github.com/bwmarrin/discordgo/examples/airhorn/main.go
new file mode 100644
index 00000000..cc61301c
--- /dev/null
+++ b/vendor/github.com/bwmarrin/discordgo/examples/airhorn/main.go
@@ -0,0 +1,186 @@
+package main
+
+import (
+ "encoding/binary"
+ "flag"
+ "fmt"
+ "io"
+ "os"
+ "strings"
+ "time"
+
+ "github.com/bwmarrin/discordgo"
+)
+
+func init() {
+ flag.StringVar(&token, "t", "", "Account Token")
+ flag.Parse()
+}
+
+var token string
+var buffer = make([][]byte, 0)
+
+func main() {
+ if token == "" {
+ fmt.Println("No token provided. Please run: airhorn -t <bot token>")
+ return
+ }
+
+ // Load the sound file.
+ err := loadSound()
+ if err != nil {
+ fmt.Println("Error loading sound: ", err)
+ fmt.Println("Please copy $GOPATH/src/github.com/bwmarrin/examples/airhorn/airhorn.dca to this directory.")
+ return
+ }
+
+ // Create a new Discord session using the provided token.
+ dg, err := discordgo.New(token)
+ if err != nil {
+ fmt.Println("Error creating Discord session: ", err)
+ return
+ }
+
+ // Register ready as a callback for the ready events.
+ dg.AddHandler(ready)
+
+ // Register messageCreate as a callback for the messageCreate events.
+ dg.AddHandler(messageCreate)
+
+ // Register guildCreate as a callback for the guildCreate events.
+ dg.AddHandler(guildCreate)
+
+ // Open the websocket and begin listening.
+ err = dg.Open()
+ if err != nil {
+ fmt.Println("Error opening Discord session: ", err)
+ }
+
+ fmt.Println("Airhorn is now running. Press CTRL-C to exit.")
+ // Simple way to keep program running until CTRL-C is pressed.
+ <-make(chan struct{})
+ return
+}
+
+func ready(s *discordgo.Session, event *discordgo.Ready) {
+ // Set the playing status.
+ _ = s.UpdateStatus(0, "!airhorn")
+}
+
+// This function will be called (due to AddHandler above) every time a new
+// message is created on any channel that the autenticated bot has access to.
+func messageCreate(s *discordgo.Session, m *discordgo.MessageCreate) {
+ if strings.HasPrefix(m.Content, "!airhorn") {
+ // Find the channel that the message came from.
+ c, err := s.State.Channel(m.ChannelID)
+ if err != nil {
+ // Could not find channel.
+ return
+ }
+
+ // Find the guild for that channel.
+ g, err := s.State.Guild(c.GuildID)
+ if err != nil {
+ // Could not find guild.
+ return
+ }
+
+ // Look for the message sender in that guilds current voice states.
+ for _, vs := range g.VoiceStates {
+ if vs.UserID == m.Author.ID {
+ err = playSound(s, g.ID, vs.ChannelID)
+ if err != nil {
+ fmt.Println("Error playing sound:", err)
+ }
+
+ return
+ }
+ }
+ }
+}
+
+// This function will be called (due to AddHandler above) every time a new
+// guild is joined.
+func guildCreate(s *discordgo.Session, event *discordgo.GuildCreate) {
+ if event.Guild.Unavailable != nil {
+ return
+ }
+
+ for _, channel := range event.Guild.Channels {
+ if channel.ID == event.Guild.ID {
+ _, _ = s.ChannelMessageSend(channel.ID, "Airhorn is ready! Type !airhorn while in a voice channel to play a sound.")
+ return
+ }
+ }
+}
+
+// loadSound attempts to load an encoded sound file from disk.
+func loadSound() error {
+ file, err := os.Open("airhorn.dca")
+
+ if err != nil {
+ fmt.Println("Error opening dca file :", err)
+ return err
+ }
+
+ var opuslen int16
+
+ for {
+ // Read opus frame length from dca file.
+ err = binary.Read(file, binary.LittleEndian, &opuslen)
+
+ // If this is the end of the file, just return.
+ if err == io.EOF || err == io.ErrUnexpectedEOF {
+ return nil
+ }
+
+ if err != nil {
+ fmt.Println("Error reading from dca file :", err)
+ return err
+ }
+
+ // Read encoded pcm from dca file.
+ InBuf := make([]byte, opuslen)
+ err = binary.Read(file, binary.LittleEndian, &InBuf)
+
+ // Should not be any end of file errors
+ if err != nil {
+ fmt.Println("Error reading from dca file :", err)
+ return err
+ }
+
+ // Append encoded pcm data to the buffer.
+ buffer = append(buffer, InBuf)
+ }
+}
+
+// playSound plays the current buffer to the provided channel.
+func playSound(s *discordgo.Session, guildID, channelID string) (err error) {
+ // Join the provided voice channel.
+ vc, err := s.ChannelVoiceJoin(guildID, channelID, false, true)
+ if err != nil {
+ return err
+ }
+
+ // Sleep for a specified amount of time before playing the sound
+ time.Sleep(250 * time.Millisecond)
+
+ // Start speaking.
+ _ = vc.Speaking(true)
+
+ // Send the buffer data.
+ for _, buff := range buffer {
+ vc.OpusSend <- buff
+ }
+
+ // Stop speaking
+ _ = vc.Speaking(false)
+
+ // Sleep for a specificed amount of time before ending.
+ time.Sleep(250 * time.Millisecond)
+
+ // Disconnect from the provided voice channel.
+ _ = vc.Disconnect()
+
+ return nil
+}
diff --git a/vendor/github.com/bwmarrin/discordgo/examples/appmaker/main.go b/vendor/github.com/bwmarrin/discordgo/examples/appmaker/main.go
new file mode 100644
index 00000000..bd0e3b88
--- /dev/null
+++ b/vendor/github.com/bwmarrin/discordgo/examples/appmaker/main.go
@@ -0,0 +1,98 @@
+package main
+
+import (
+ "flag"
+ "fmt"
+
+ "github.com/bwmarrin/discordgo"
+)
+
+// Variables used for command line options
+var (
+ Email string
+ Password string
+ Token string
+ AppName string
+ DeleteID string
+ ListOnly bool
+)
+
+func init() {
+
+ flag.StringVar(&Email, "e", "", "Account Email")
+ flag.StringVar(&Password, "p", "", "Account Password")
+ flag.StringVar(&Token, "t", "", "Account Token")
+ flag.StringVar(&DeleteID, "d", "", "Application ID to delete")
+ flag.BoolVar(&ListOnly, "l", false, "List Applications Only")
+ flag.StringVar(&AppName, "a", "", "App/Bot Name")
+ flag.Parse()
+}
+
+func main() {
+
+ var err error
+ // Create a new Discord session using the provided login information.
+ dg, err := discordgo.New(Email, Password, Token)
+ if err != nil {
+ fmt.Println("error creating Discord session,", err)
+ return
+ }
+
+ // If -l set, only display a list of existing applications
+ // for the given account.
+ if ListOnly {
+ aps, err2 := dg.Applications()
+ if err2 != nil {
+ fmt.Println("error fetching applications,", err)
+ return
+ }
+
+ for k, v := range aps {
+ fmt.Printf("%d : --------------------------------------\n", k)
+ fmt.Printf("ID: %s\n", v.ID)
+ fmt.Printf("Name: %s\n", v.Name)
+ fmt.Printf("Secret: %s\n", v.Secret)
+ fmt.Printf("Description: %s\n", v.Description)
+ }
+ return
+ }
+
+ // if -d set, delete the given Application
+ if DeleteID != "" {
+ err = dg.ApplicationDelete(DeleteID)
+ if err != nil {
+ fmt.Println("error deleting application,", err)
+ }
+ return
+ }
+
+ // Create a new application.
+ ap := &discordgo.Application{}
+ ap.Name = AppName
+ ap, err = dg.ApplicationCreate(ap)
+ if err != nil {
+ fmt.Println("error creating new applicaiton,", err)
+ return
+ }
+
+ fmt.Printf("Application created successfully:\n")
+ fmt.Printf("ID: %s\n", ap.ID)
+ fmt.Printf("Name: %s\n", ap.Name)
+ fmt.Printf("Secret: %s\n\n", ap.Secret)
+
+ // Create the bot account under the application we just created
+ bot, err := dg.ApplicationBotCreate(ap.ID)
+ if err != nil {
+ fmt.Println("error creating bot account,", err)
+ return
+ }
+
+ fmt.Printf("Bot account created successfully.\n")
+ fmt.Printf("ID: %s\n", bot.ID)
+ fmt.Printf("Username: %s\n", bot.Username)
+ fmt.Printf("Token: %s\n\n", bot.Token)
+ fmt.Println("Please save the above posted info in a secure place.")
+ fmt.Println("You will need that information to login with your bot account.")
+
+ return
+}
diff --git a/vendor/github.com/bwmarrin/discordgo/examples/avatar/localfile/main.go b/vendor/github.com/bwmarrin/discordgo/examples/avatar/localfile/main.go
new file mode 100644
index 00000000..adfe0b1d
--- /dev/null
+++ b/vendor/github.com/bwmarrin/discordgo/examples/avatar/localfile/main.go
@@ -0,0 +1,73 @@
+package main
+
+import (
+ "encoding/base64"
+ "flag"
+ "fmt"
+ "io/ioutil"
+ "net/http"
+
+ "github.com/bwmarrin/discordgo"
+)
+
+// Variables used for command line parameters
+var (
+ Email string
+ Password string
+ Token string
+ Avatar string
+ BotID string
+ BotUsername string
+)
+
+func init() {
+
+ flag.StringVar(&Email, "e", "", "Account Email")
+ flag.StringVar(&Password, "p", "", "Account Password")
+ flag.StringVar(&Token, "t", "", "Account Token")
+ flag.StringVar(&Avatar, "f", "./avatar.jpg", "Avatar File Name")
+ flag.Parse()
+}
+
+func main() {
+
+ // Create a new Discord session using the provided login information.
+ // Use discordgo.New(Token) to just use a token for login.
+ dg, err := discordgo.New(Email, Password, Token)
+ if err != nil {
+ fmt.Println("error creating Discord session,", err)
+ return
+ }
+
+ bot, err := dg.User("@me")
+ if err != nil {
+ fmt.Println("error fetching the bot details,", err)
+ return
+ }
+
+ BotID = bot.ID
+ BotUsername = bot.Username
+ changeAvatar(dg)
+
+ fmt.Println("Bot is now running. Press CTRL-C to exit.")
+ // Simple way to keep program running until CTRL-C is pressed.
+ <-make(chan struct{})
+ return
+}
+
+// Helper function to change the avatar
+func changeAvatar(s *discordgo.Session) {
+ img, err := ioutil.ReadFile(Avatar)
+ if err != nil {
+ fmt.Println(err)
+ }
+
+ base64 := base64.StdEncoding.EncodeToString(img)
+
+ avatar := fmt.Sprintf("data:%s;base64,%s", http.DetectContentType(img), base64)
+
+ _, err = s.UserUpdate("", "", BotUsername, avatar, "")
+ if err != nil {
+ fmt.Println(err)
+ }
+}
diff --git a/vendor/github.com/bwmarrin/discordgo/examples/avatar/url/main.go b/vendor/github.com/bwmarrin/discordgo/examples/avatar/url/main.go
new file mode 100644
index 00000000..26170df5
--- /dev/null
+++ b/vendor/github.com/bwmarrin/discordgo/examples/avatar/url/main.go
@@ -0,0 +1,86 @@
+package main
+
+import (
+ "encoding/base64"
+ "flag"
+ "fmt"
+ "io/ioutil"
+ "net/http"
+
+ "github.com/bwmarrin/discordgo"
+)
+
+// Variables used for command line parameters
+var (
+ Email string
+ Password string
+ Token string
+ URL string
+ BotID string
+ BotUsername string
+)
+
+func init() {
+
+ flag.StringVar(&Email, "e", "", "Account Email")
+ flag.StringVar(&Password, "p", "", "Account Password")
+ flag.StringVar(&Token, "t", "", "Account Token")
+ flag.StringVar(&URL, "l", "http://bwmarrin.github.io/discordgo/img/discordgo.png", "Link to the avatar image")
+ flag.Parse()
+}
+
+func main() {
+
+ // Create a new Discord session using the provided login information.
+ // Use discordgo.New(Token) to just use a token for login.
+ dg, err := discordgo.New(Email, Password, Token)
+ if err != nil {
+ fmt.Println("error creating Discord session,", err)
+ return
+ }
+
+ bot, err := dg.User("@me")
+ if err != nil {
+ fmt.Println("error fetching the bot details,", err)
+ return
+ }
+
+ BotID = bot.ID
+ BotUsername = bot.Username
+ changeAvatar(dg)
+
+ fmt.Println("Bot is now running. Press CTRL-C to exit.")
+ // Simple way to keep program running until CTRL-C is pressed.
+ <-make(chan struct{})
+ return
+}
+
+// Helper function to change the avatar
+func changeAvatar(s *discordgo.Session) {
+
+ resp, err := http.Get(URL)
+ if err != nil {
+ fmt.Println("Error retrieving the file, ", err)
+ return
+ }
+
+ defer func() {
+ _ = resp.Body.Close()
+ }()
+
+ img, err := ioutil.ReadAll(resp.Body)
+ if err != nil {
+ fmt.Println("Error reading the response, ", err)
+ return
+ }
+
+ base64 := base64.StdEncoding.EncodeToString(img)
+
+ avatar := fmt.Sprintf("data:%s;base64,%s", http.DetectContentType(img), base64)
+
+ _, err = s.UserUpdate("", "", BotUsername, avatar, "")
+ if err != nil {
+ fmt.Println("Error setting the avatar, ", err)
+ }
+
+}
diff --git a/vendor/github.com/bwmarrin/discordgo/examples/mytoken/main.go b/vendor/github.com/bwmarrin/discordgo/examples/mytoken/main.go
new file mode 100644
index 00000000..5914fc8a
--- /dev/null
+++ b/vendor/github.com/bwmarrin/discordgo/examples/mytoken/main.go
@@ -0,0 +1,33 @@
+package main
+
+import (
+ "flag"
+ "fmt"
+
+ "github.com/bwmarrin/discordgo"
+)
+
+// Variables used for command line parameters
+var (
+ Email string
+ Password string
+)
+
+func init() {
+
+ flag.StringVar(&Email, "e", "", "Account Email")
+ flag.StringVar(&Password, "p", "", "Account Password")
+ flag.Parse()
+}
+
+func main() {
+
+ // Create a new Discord session using the provided login information.
+ dg, err := discordgo.New(Email, Password)
+ if err != nil {
+ fmt.Println("error creating Discord session,", err)
+ return
+ }
+
+ fmt.Printf("Your Authentication Token is:\n\n%s\n", dg.Token)
+}
diff --git a/vendor/github.com/bwmarrin/discordgo/examples/new_basic/main.go b/vendor/github.com/bwmarrin/discordgo/examples/new_basic/main.go
new file mode 100644
index 00000000..c3861ac0
--- /dev/null
+++ b/vendor/github.com/bwmarrin/discordgo/examples/new_basic/main.go
@@ -0,0 +1,58 @@
+package main
+
+import (
+ "flag"
+ "fmt"
+ "time"
+
+ "github.com/bwmarrin/discordgo"
+)
+
+// Variables used for command line parameters
+var (
+ Email string
+ Password string
+ Token string
+)
+
+func init() {
+
+ flag.StringVar(&Email, "e", "", "Account Email")
+ flag.StringVar(&Password, "p", "", "Account Password")
+ flag.StringVar(&Token, "t", "", "Account Token")
+ flag.Parse()
+}
+
+func main() {
+
+ // Create a new Discord session using the provided login information.
+ // Use discordgo.New(Token) to just use a token for login.
+ dg, err := discordgo.New(Email, Password, Token)
+ if err != nil {
+ fmt.Println("error creating Discord session,", err)
+ return
+ }
+
+ // Register messageCreate as a callback for the messageCreate events.
+ dg.AddHandler(messageCreate)
+
+ // Open the websocket and begin listening.
+ err = dg.Open()
+ if err != nil {
+ fmt.Println("error opening connection,", err)
+ return
+ }
+
+ fmt.Println("Bot is now running. Press CTRL-C to exit.")
+ // Simple way to keep program running until CTRL-C is pressed.
+ <-make(chan struct{})
+ return
+}
+
+// This function will be called (due to AddHandler above) every time a new
+// message is created on any channel that the autenticated bot has access to.
+func messageCreate(s *discordgo.Session, m *discordgo.MessageCreate) {
+
+ // Print message to stdout.
+ fmt.Printf("%20s %20s %20s > %s\n", m.ChannelID, time.Now().Format(time.Stamp), m.Author.Username, m.Content)
+}
diff --git a/vendor/github.com/bwmarrin/discordgo/examples/pingpong/main.go b/vendor/github.com/bwmarrin/discordgo/examples/pingpong/main.go
new file mode 100644
index 00000000..e6893ca1
--- /dev/null
+++ b/vendor/github.com/bwmarrin/discordgo/examples/pingpong/main.go
@@ -0,0 +1,78 @@
+package main
+
+import (
+ "flag"
+ "fmt"
+
+ "github.com/bwmarrin/discordgo"
+)
+
+// Variables used for command line parameters
+var (
+ Email string
+ Password string
+ Token string
+ BotID string
+)
+
+func init() {
+
+ flag.StringVar(&Email, "e", "", "Account Email")
+ flag.StringVar(&Password, "p", "", "Account Password")
+ flag.StringVar(&Token, "t", "", "Account Token")
+ flag.Parse()
+}
+
+func main() {
+
+ // Create a new Discord session using the provided login information.
+ dg, err := discordgo.New(Email, Password, Token)
+ if err != nil {
+ fmt.Println("error creating Discord session,", err)
+ return
+ }
+
+ // Get the account information.
+ u, err := dg.User("@me")
+ if err != nil {
+ fmt.Println("error obtaining account details,", err)
+ }
+
+ // Store the account ID for later use.
+ BotID = u.ID
+
+ // Register messageCreate as a callback for the messageCreate events.
+ dg.AddHandler(messageCreate)
+
+ // Open the websocket and begin listening.
+ err = dg.Open()
+ if err != nil {
+ fmt.Println("error opening connection,", err)
+ return
+ }
+
+ fmt.Println("Bot is now running. Press CTRL-C to exit.")
+ // Simple way to keep program running until CTRL-C is pressed.
+ <-make(chan struct{})
+ return
+}
+
+// This function will be called (due to AddHandler above) every time a new
+// message is created on any channel that the autenticated bot has access to.
+func messageCreate(s *discordgo.Session, m *discordgo.MessageCreate) {
+
+ // Ignore all messages created by the bot itself
+ if m.Author.ID == BotID {
+ return
+ }
+
+ // If the message is "ping" reply with "Pong!"
+ if m.Content == "ping" {
+ _, _ = s.ChannelMessageSend(m.ChannelID, "Pong!")
+ }
+
+ // If the message is "pong" reply with "Ping!"
+ if m.Content == "pong" {
+ _, _ = s.ChannelMessageSend(m.ChannelID, "Ping!")
+ }
+}