Advertisement
Guest User

Untitled

a guest
Mar 25th, 2014
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 1.59 KB | None | 0 0
  1. package bot
  2.  
  3. import org.jibble.pircbot.PircBot
  4. import akka.actor.{Props, ActorRef, Actor}
  5.  
  6. /**
  7.  * The bot. Hangs out in one channel and starts games, creating new channels for them.
  8.  * @param mainChannel The channel the bot hangs out in
  9.  */
  10. class AscensionBot(
  11.   nick: String,
  12.   mainChannel: String,
  13.   server: String,
  14.   port: Int = 6667) extends PircBot with Actor {
  15.  
  16.   // Map from channel name to handler for that channel
  17.   var channelHandlers = Map.empty[String, ActorRef]
  18.  
  19.   def receive = {
  20.     case Connected => self ! JoinChannel(mainChannel)
  21.  
  22.     case JoinChannel(channel) => joinChannel(channel)
  23.  
  24.     case ChannelJoined(channel) =>
  25.       channelHandlers += (channel -> context.actorOf(
  26.         if (channel == mainChannel) Props[MainChannelHandler]
  27.         else Props[GameChannelHandler]))
  28.  
  29.     case SendMessage(channel, message) => sendMessage(channel, message)
  30.   }
  31.  
  32.   override def onConnect = self ! Connected
  33.  
  34.   override def onJoin(channel: String, sender: String, login: String, hostname: String) = {
  35.     if (sender == this.getNick)
  36.       self ! ChannelJoined(channel)
  37.   }
  38.  
  39.   override def onMessage(channel: String, sender: String, login: String, hostname: String, message: String) =
  40.     if (sender != this.getNick)
  41.       channelHandlers.get(channel).foreach(_ ! ProcessMessage(sender, message))
  42.  
  43.   this.setName(nick)
  44.   this.connect(server, port)
  45. }
  46.  
  47. case object Connected
  48. case class JoinChannel(channel: String)
  49. case class ChannelJoined(channel: String)
  50. case class SendMessage(channel: String, message: String)
  51. case class ProcessMessage(username: String, message: String)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement