initial master
authorIan Sutton <ians@openbsd.org>
Fri, 28 Dec 2018 05:04:11 +0000 (23:04 -0600)
committerIan Sutton <ians@openbsd.org>
Fri, 28 Dec 2018 05:04:11 +0000 (23:04 -0600)
COPYING [new file with mode: 0644]
main.go [new file with mode: 0644]

diff --git a/COPYING b/COPYING
new file mode 100644 (file)
index 0000000..1550258
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,13 @@
+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.
diff --git a/main.go b/main.go
new file mode 100644 (file)
index 0000000..c3dcd86
--- /dev/null
+++ b/main.go
@@ -0,0 +1,71 @@
+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!")
+       }
+}