       uid = get_ip_with_tripcode(ip)
       callback = params.callback
       text = params.text
-      top = params.top
-      color = params.color
-      size = params.size
-      weight = params.weight
-      speed = params.speed
-
-      loop
-        break if not text
-        text = text.substr(0, 64)
-        text = strip_hyper_links(strip_irc_colors(self.stringFilter(text)))
-
-        top = Math.random()
-        color = '255,255,255,0.9'
-        size = 1.0
-        weight = 'bold'
-        speed = 1.0
-
-        item =
-          id: self.last_record_id + 1
-          text: text
-          top: top
-          color: color.split(',')
-          size: size
-          weight: weight
-          speed: speed
-          uid: uid
-          ip: ip
-          timestamp: timestamp
-
-        try
-          self.browserCheck(req)
-          self.blacklistCheck(ip)
-          self.fragtableCheck(address) for address in forwarded_ips
-          self.sensitive_wordCheck(text)
-          self.db.collection(self.dbName).insert item, (result) ->
-            DEBUG('Insert id %d (%s)', self.last_record_id, ip)
-            res.send(jsonp_stringify(ret, callback))
-          self.last_record_id++
-          if not self.mute
-            if self.metadata_updated
-              title = self.metadata.title
-              artist = self.metadata.artist
-              tags = self.metadata.tags
-              nodeirc.say("\u000306Now playing: \u000314#{artist} - #{title} (#{tags})")
-              self.metadata_updated = false
-            nodeirc.action("\u000306[#{uid}] \u000314#{text}")
-        catch error
-          switch error
-            when 'BLACKLIST'
-              ret.code = 418
-              ret.status = 'I\'m a teapot'
-            else
-              ret.code = 500
-              ret.status = error
-          ret.data.push(item)
-          WARN('%s (%s)', error, ip)
-          res.send(jsonp_stringify(ret, callback))
-          if not self.mute && self.last_blacklist_uid != uid
-            nodeirc.action("\u000306[#{uid}]\u000301,01 #{text} \u000304(#{error})")
-          self.last_blacklist_uid = uid
-        return
-
+
+      text = text.substr(0, 64)
+      text = strip_hyper_links(strip_irc_colors(self.stringFilter(text)))
+
+      try
+        self.browserCheck(req)
+        self.blacklistCheck(ip)
+        self.fragtableCheck(address) for address in forwarded_ips
+        self.ignoredWordsCheck(text)
+        self.say(text, ip)
+      catch error
+        switch error
+          when 'BLACKLIST'
+            ret.code = 418
+            ret.status = 'I\'m a teapot'
+          else
+            ret.code = 500
+            ret.status = error
+        WARN('%s (%s)', error, ip)
+        if not self.mute && self.last_blacklist_uid != uid
+          nodeirc.action("\u000306[#{uid}]\u000301,01 #{text} \u000304(#{error})")
+        self.last_blacklist_uid = uid
       res.send(jsonp_stringify(ret, callback))
 
     self.routes['GET']['/poll'] = (req, res) ->


  stringFilter: (text) =>
    self = this
    if self.sensitive_words.length == 0
      sensitive_word_files = fs.readdirSync(self.sensitive_word_file_dir)
      for sensitive_word_file in sensitive_word_files
        self.loadStringFilter("#{self.sensitive_word_file_dir}/#{sensitive_word_file}")

    safe_text = text
    for sensitive_word in self.sensitive_words
      switch sensitive_word.type

    if not (domain && domain.match(/^(?:[A-Za-z0-9\-\.]+\.)?phate\.(?:io|cc|us|tw|org)$/i)?)
      safe_referer = strip_hyper_links(strip_irc_colors(referer))
      throw "REFERRAL_DENIED: #{safe_referer}"

  loadBlacklist: =>
    self = this
    self.db.collection(self.dbConfigName).find(
      name: 'blacklist'
    ).sort(id: 1).toArray (err, items) ->
      throw err if err
      return if items.length == 0
      self.blacklist = JSON.parse(items[0].text)
      DEBUG('Load %d blacklist items from database.', Object.keys(self.blacklist).length)

  saveBlacklist: =>
    self = this
    criteria =
      name: 'blacklist'
    data =
      name: 'blacklist'
      text: JSON.stringify(self.blacklist)
    options =
      upsert: true
    self.db.collection(self.dbConfigName).update criteria, data, options, (err, count, status) ->
      throw err if err
      DEBUG('Save blacklist to database. Returned %s', status)

  blacklistCheck: (ip) =>
    self = this
