From 9988e0e8e1ec1d08f703e10f9d9ccc3ad85edf90 Mon Sep 17 00:00:00 2001 From: Nathan Perry Date: Sat, 30 Apr 2016 17:22:33 +0000 Subject: initial commit --- .gitignore | 5 +++++ build.sbt | 17 +++++++++++++++++ config.example.yml | 11 +++++++++++ event_handler.scala | 33 +++++++++++++++++++++++++++++++++ main.scala | 30 ++++++++++++++++++++++++++++++ 5 files changed, 96 insertions(+) create mode 100644 .gitignore create mode 100755 build.sbt create mode 100755 config.example.yml create mode 100755 event_handler.scala create mode 100755 main.scala 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'.") + } +} -- cgit v1.3.1