     bot.addListener 'message', (from, to, message) ->
       console.log "From #{from} to #{to}: #{message}"
 
-      user = self.userForName from
-      unless user?
-        id = (new Date().getTime() / 1000).toString().replace('.','')
-        user = self.userForId id
-        user.name = from
-
-      if to.match(/^[&#]/)
-        user.room = to
+      user = self.createUser to, from
+      if user.room
         console.log "#{to} <#{from}> #{message}"
       else
-        user.room = null
         console.log "msg <#{from}> #{message}"
 
       self.receive new TextMessage(user, message)

    bot.addListener 'join', (channel, who) ->
        console.log('%s has joined %s', who, channel)

        user = self.userForName who
        self.receive new EnterMessage(user)

    bot.addListener 'part', (channel, who, reason) ->
        console.log('%s has left %s: %s', who, channel, reason)

        user = self.userForName who
        self.receive new LeaveMessage(user)

    bot.addListener 'kick', (channel, who, _by, reason) ->
        console.log('%s was kicked from %s by %s: %s', who, channel, _by, reason)


exports.use = (robot) ->
  new IrcBot robot
