summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Perry <nathan@meta.sc>2016-04-30 13:22:33 -0400
committerNathan Perry <nathan@meta.sc>2016-04-30 13:22:33 -0400
commit9988e0e8e1ec1d08f703e10f9d9ccc3ad85edf90 (patch)
treec00bf130e8a6a649620e26d8dafbaba2ed253441
initial commitscala
-rw-r--r--.gitignore5
-rwxr-xr-xbuild.sbt17
-rwxr-xr-xconfig.example.yml11
-rwxr-xr-xevent_handler.scala33
-rwxr-xr-xmain.scala30
5 files changed, 96 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..8594241
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,5 @@
+.ensime
+.ensime_cache
+project
+target
+config.yml
diff --git a/build.sbt b/build.sbt
new file mode 100755
index 0000000..c14f31d
--- /dev/null
+++ b/build.sbt
@@ -0,0 +1,17 @@
+lazy val root = (project in file("."))
+
+libraryDependencies ++= Seq(
+ "com.github.austinv11" % "Discord4J" % "2.4.6",
+ "org.slf4j" % "slf4j-simple" % "1.7.9",
+ "org.yaml" % "snakeyaml" % "1.17",
+ "org.scala-lang" % "scala-reflect" % "2.11.8"
+)
+
+resolvers ++= Seq(
+ "jcenter-bintray" at "http://jcenter.bintray.com",
+ "jitpack.io" at "https://jitpack.io"
+)
+
+scalacOptions ++= Seq("-deprecation", "-feature", "-language:implicitConversions")
+
+scalaVersion := "2.11.8"
diff --git a/config.example.yml b/config.example.yml
new file mode 100755
index 0000000..9cc1a19
--- /dev/null
+++ b/config.example.yml
@@ -0,0 +1,11 @@
+trigger: sample
+
+queue_size: 5
+admin: 12345678901234567
+op_role: sample-controller
+
+server: sample
+voice_channel: General
+
+username: username@example.com
+password: testpass123
diff --git a/event_handler.scala b/event_handler.scala
new file mode 100755
index 0000000..275de9c
--- /dev/null
+++ b/event_handler.scala
@@ -0,0 +1,33 @@
+import sx.blah.discord._
+import api.{EventSubscriber => Event}
+import handle.impl.events.{ReadyEvent => Ready, _}
+
+import org.slf4j._
+
+object EventHandler {
+ val logger = LoggerFactory getLogger EventHandler.getClass
+
+ @Event
+ def ready(event: Ready) = {
+ val user = event.getClient.getOurUser
+ logger info s"Logged in as ${user.getName} (${user.getID})"
+ }
+
+ @Event
+ def message(event: MessageReceivedEvent): Unit = {
+ val msg = event.getMessage
+ logger info s"Received ${if (msg.getChannel.isPrivate) "private" else "public"} message '${msg.getContent}' from ${msg.getGuild.getName}#${msg.getChannel.getName}"+
+ s"::${msg.getAuthor.getName} (${msg.getAuthor.getID})"
+
+ if (msg.getChannel.isPrivate) {
+ logger debug "Ignoring private message."
+ return
+ }
+
+ if (msg.getGuild.getID != (Config \ "server": Int)) {
+ logger debug s"Message from wrong server (${msg.getGuild.getName})"
+ return
+ }
+
+ }
+}
diff --git a/main.scala b/main.scala
new file mode 100755
index 0000000..6f82513
--- /dev/null
+++ b/main.scala
@@ -0,0 +1,30 @@
+object Main {
+ import org.slf4j._
+ import sx.blah.discord._
+
+ val logger = LoggerFactory getLogger Main.getClass
+
+ def main(args: Array[String]) = {
+ import api._
+
+ val client = (new ClientBuilder withLogin (Config \ "username", Config \ "password")).login
+ client.getDispatcher registerListener EventHandler
+ }
+}
+
+object Config {
+ import scala.io.Source
+ import org.yaml.snakeyaml._
+ import scala.collection._
+ import scala.collection.JavaConverters._
+ import java.util.{Map => JMap}
+
+ lazy val yaml: Map[String, Any] = ((new Yaml) load (Source fromFile "config.yml").mkString).asInstanceOf[JMap[String, Any]].asScala
+
+ import scala.reflect.runtime.universe._
+ def \[T: TypeTag](item: String): T = (yaml get item) match {
+ case Some(x: String) if typeOf[T] <:< typeOf[Int] => x.toInt.asInstanceOf[T]
+ case Some(x) => x.asInstanceOf[T]
+ case None => throw new IllegalStateException(s"Config had no value for '$item'.")
+ }
+}