Skip to content

Instantly share code, notes, and snippets.

@armstnp
Last active April 18, 2018 21:35
Show Gist options
  • Save armstnp/2ed2ba918befa41aba887151aef81db0 to your computer and use it in GitHub Desktop.
Save armstnp/2ed2ba918befa41aba887151aef81db0 to your computer and use it in GitHub Desktop.
A quick-and-dirty echo bot using JDA in Clojure
(ns astralaria-clj.discord.jda-bind
(:require [astralaria-clj.util :refer :all])
(:import [net.dv8tion.jda.core AccountType JDABuilder Permission]
[net.dv8tion.jda.core.hooks ListenerAdapter]
[java.lang Object]
[net.dv8tion.jda.core.events.message MessageReceivedEvent]))
(def bot-token "*****")
(defn echo-message [^MessageReceivedEvent event]
(let [msg (-> event .getMessage .getContentDisplay)
author (.getAuthor event)
channel (.getChannel event)]
(when-not (.isBot author)
(.queue (.sendMessage channel msg)))))
(def listener
(proxy [ListenerAdapter] []
(onMessageReceived [event] (echo-message event))))
(->
AccountType/BOT
JDABuilder.
(.setToken bot-token)
(.addEventListener (into-array Object [listener]))
.buildBlocking
.asBot
(as-> bot
{:bot bot
:invite (.getInviteUrl
bot
(enum-coll Permission VIEW_CHANNEL MESSAGE_READ MESSAGE_WRITE))}))
(ns astralaria-clj.util)
(defn ^:private -enum-coll [enum-class & enum-vals]
(let [enum-name (str enum-class)]
`[~@(map #(symbol enum-name (str %)) enum-vals)]))
(defmacro enum-coll [& forms]
(apply -enum-coll forms))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment