# Description: # funzioni speciali per telegram-cli # # Configuration: # Uses hubot-tg enviroment variables # # Commands # hubot chi sei - chiedi a hubot di identificarsi # hubot chi sono / cosa sai di me - mostra il tuo contatto nel registro di hubot # hubot in che gruppi sei / dove scrivi - chiedi a hubot dove chatta # hubot (mi inviti / invitami) (nel gruppo / in) - chiedi ad hubot di invitardi in un gruppo # # Author: # Michele Guerini Rocco (rnhmjoj) # net = require 'net' module.exports = (robot) -> console.log robot.host # directly run a command in telegram-cli and return its output # (a list of strings) run_command = (command, callback) -> client = net.connect robot.adapter.port, robot.adapter.host, -> client.write command+'\n' client.setEncoding 'utf8' client.on 'data', (reply) -> if callback? callback (reply.split '\n')[1..-3] client.end() # return an object with the known user information user_info = (command, callback) -> run_command command, (data) -> match = (data.join '\n').match /// User\ (\w+(\ ?\w+)+) # contact name (\ @(\w+))? # telegram username (\ \(\#(\d+)\))? # telegram id [\s\S]+phone:\ (\d+)? # phone number /// user = name: match[1] username: match[4] id: match[6] phone: match[7] robot.logger.info 'parsed user data: ' + JSON.stringify user, null, 2 callback user # return the list of active chat groups group_list = (callback) -> run_command 'dialog_list', (list) -> chats = list.filter (item) -> not item.lastIndexOf 'Chat', 0 chats = chats.map (chat) -> (chat.match /Chat (.+):/)[1] robot.logger.info 'parsed bot chats list: ' + JSON.stringify chats, null, 2 callback chats robot.respond /chi sei/, (res) -> user_info 'get_self', (user) -> username = if user.username? then " noto anche come #{user.username}" else '' phone = if user.phone? then " chiamatemi al #{user.phone}. " else '. ' id = "il mio id di telegram è #{user.id}" res.send "sono #{user.name}#{username},#{phone}#{id}" robot.respond /(cosa sai di me|chi sono)/i, (res) -> user_info 'user_info ' + res.message.user.name, (user) -> username = if user.username? then " ma ti chiamano anche #{user.username}" else '' phone = if user.phone? then " so il tuo numero: #{user.phone} e " else ' ' id = "il tuo id di telegram è #{user.id}" res.send "so che sei #{user.name}#{username},#{phone}#{id}" robot.respond /(in che gruppi sei| dove scrivi)/, (res) -> intro = ['scrivo in questi gruppi', 'chatto qui', 'sono attivo in'] group_list (list) -> res.send (res.random intro) + ':\n' + (list.map (i) -> '* '+i).join '\n' robot.respond /(mi )?invit(i|ami) (in|nel gruppo) (.+)\??/, (res) -> nope = ['dove?', 'mai sentito questo?', 'invita anche me magari'] ok = ['provvedo', 'ok', 'certo', 'va bene'] done = ['fatto', 'ecco qui', 'ecco'] group_list (list) -> chat = res.match[4] if not chat in list res.send res.random nope return res.send res.random ok run_command "chat_add_user #{chat} #{res.message.user.name}" res.send res.random done