--- /dev/null
+Copyright (c) 2018, Ian Sutton <ians@openbsd.org>
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
--- /dev/null
+package main
+
+import (
+ "flag"
+ "fmt"
+ "os"
+ "os/signal"
+ "syscall"
+
+ "github.com/bwmarrin/discordgo"
+)
+
+// Variables used for command line parameters
+var (
+ Token string
+)
+
+func init() {
+
+ flag.StringVar(&Token, "t", "", "Bot Token")
+ flag.Parse()
+}
+
+func main() {
+
+ // Create a new Discord session using the provided bot token.
+ dg, err := discordgo.New("Bot " + Token)
+ if err != nil {
+ fmt.Println("error creating Discord session,", err)
+ return
+ }
+
+ // Register the messageCreate func as a callback for MessageCreate events.
+ dg.AddHandler(messageCreate)
+
+ // Open a websocket connection to Discord and begin listening.
+ err = dg.Open()
+ if err != nil {
+ fmt.Println("error opening connection,", err)
+ return
+ }
+
+ // Wait here until CTRL-C or other term signal is received.
+ fmt.Println("Bot is now running. Press CTRL-C to exit.")
+ sc := make(chan os.Signal, 1)
+ signal.Notify(sc, syscall.SIGINT, syscall.SIGTERM, os.Interrupt, os.Kill)
+ <-sc
+
+ // Cleanly close down the Discord session.
+ dg.Close()
+}
+
+// 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
+ // This isn't required in this specific example but it's a good practice.
+ if m.Author.ID == s.State.User.ID {
+ return
+ }
+ // If the message is "ping" reply with "Pong!"
+ if m.Content == "bad bot" {
+ s.ChannelMessageSend(m.ChannelID, "the worst bot")
+ }
+
+ // If the message is "pong" reply with "Ping!"
+ if m.Content == "pong" {
+ s.ChannelMessageSend(m.ChannelID, "Ping!")
+ }
+}