Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package bot
- import org.jibble.pircbot.PircBot
- import akka.actor.{Props, ActorRef, Actor}
- /**
- * The bot. Hangs out in one channel and starts games, creating new channels for them.
- * @param mainChannel The channel the bot hangs out in
- */
- class AscensionBot(
- nick: String,
- mainChannel: String,
- server: String,
- port: Int = 6667) extends PircBot with Actor {
- // Map from channel name to handler for that channel
- var channelHandlers = Map.empty[String, ActorRef]
- def receive = {
- case Connected => self ! JoinChannel(mainChannel)
- case JoinChannel(channel) => joinChannel(channel)
- case ChannelJoined(channel) =>
- channelHandlers += (channel -> context.actorOf(
- if (channel == mainChannel) Props[MainChannelHandler]
- else Props[GameChannelHandler]))
- case SendMessage(channel, message) => sendMessage(channel, message)
- }
- override def onConnect = self ! Connected
- override def onJoin(channel: String, sender: String, login: String, hostname: String) = {
- if (sender == this.getNick)
- self ! ChannelJoined(channel)
- }
- override def onMessage(channel: String, sender: String, login: String, hostname: String, message: String) =
- if (sender != this.getNick)
- channelHandlers.get(channel).foreach(_ ! ProcessMessage(sender, message))
- this.setName(nick)
- this.connect(server, port)
- }
- case object Connected
- case class JoinChannel(channel: String)
- case class ChannelJoined(channel: String)
- case class SendMessage(channel: String, message: String)
- case class ProcessMessage(username: String, message: String)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement