• icq.doc.coffee

  • ¶

    ICQ client receives messages from other ICQ users and allows to respond them. This is the main scenario the transit was created for.

    transit = require('transit-im')
    app = transit()
  • ¶

    Here we create session object. Session object will be associated with icq contact who writes to us. Session object is available as req.session in the handler.

    class IcqSession
      constructor: (@userId) ->
        console.log "#{@userId} connected"
      getName: -> @name ? "Unknown user #{@userId}"
      setName: (@name) ->
      close: ->
        console.log "#{@userId} disconnected"
  • ¶

    Add icq client. Use icq number as login.

    app.use transit.icq {login: "__ICQ_NUMBER__", password: "__PASSWORD__"}
  • ¶

    Convert html to text.

    app.use transit.html2txt()
  • ¶

    Parse commands.

    app.use transit.commandParser()
  • ¶

    Use sessions storage (in memory).

    app.use transit.sessions sessionClass: IcqSession
  • ¶

    When send something back split by 500 characters and wrap each portion with html.

    app.formatOutput transit.chain transit.chain.splitByPortions(500), transit.chain.wrapHtml()
  • ¶

    Show help if user made a mistake or types help command.

    app.use transit.autohelp()
  • ¶

    After start connect to your bot and type him messages like:

    > hello
      Hello Unknown user 555
    
    > callme Big Boss
      I'll remember that, Big
    
    > callme "Big Boss"
      I'll remember that, Big Boss
    
    > hello
      Hello Big Boss
    
    > bottles 2
      I have 2 bottles of beer. Let's drink one!
      I have 1 bottles of beer. Let's drink one!
    app.receive 'hello', (req, res) ->
      res.sendBack("Hello #{req.session.getName()}")
    
    app.receive 'callme {name}', (req, res) ->
      req.session.setName(req.attrs.name)
      res.sendBack "I'll remember that, #{req.attrs.name}"
    
    app.receive 'bottles {count}', (req, res) ->
      res.sendBack ([req.attrs.count..1].map (n) -> "I have #{n} bottles of beer. Let's drink one!").join("\n")
    
    app.start()