From e0c0dd8c02e66dbbbad0b7390a0cad57f15a26fd Mon Sep 17 00:00:00 2001 From: Bruce Marriner Date: Fri, 22 Apr 2016 12:45:22 -0500 Subject: [PATCH] Updates to Ping Pong bot. --- examples/pingpong/README.md | 45 +++++++++++++++++++---- examples/pingpong/main.go | 73 +++++++++++++++++++++++++++++++++++++ 2 files changed, 111 insertions(+), 7 deletions(-) create mode 100644 examples/pingpong/main.go diff --git a/examples/pingpong/README.md b/examples/pingpong/README.md index 5be5ca8..267d4ad 100644 --- a/examples/pingpong/README.md +++ b/examples/pingpong/README.md @@ -1,9 +1,40 @@ -=== -DiscordGo Ping Pong Example. + +PingPong Example +==== -This is an example bot that will respond to "ping" with "Pong!" and -"pong" with "Ping!" on any channel it has access to. +This example demonstrates how to utilize DiscordGo to create a Ping Pong Bot. -This example requires the use of an **Authentication Token** for login instead -of an email and password. If you don't know your token you can use the -**mytoken** example to get it. +This Bot will respond to "ping" with "Pong!" and "pong" with "Ping!". + +### Build + +This assumes you already have a working Go environment setup and that +DiscordGo is correctly installed on your system. + +```sh +go build +``` + +### Usage + +You must authenticate using either an Authentication Token or both Email and +Password for an account. Keep in mind official Bot accounts only support +authenticating via Token. + +``` +./pingpong --help +Usage of ./pingpong: + -e string + Account Email + -p string + Account Password + -t string + Account Token +``` + +The below example shows how to start the bot using an Email and Password for +authentication. + +```sh +./pingpong -e EmailHere -p PasswordHere +``` diff --git a/examples/pingpong/main.go b/examples/pingpong/main.go new file mode 100644 index 0000000..1a6d8ec --- /dev/null +++ b/examples/pingpong/main.go @@ -0,0 +1,73 @@ +package main + +import ( + "flag" + "fmt" + + "github.com/bwmarrin/discordgo" +) + +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. + dg.Open() + + 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!") + } +}