2015-06-23 01:07:54 +02:00
|
|
|
# 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
|
2015-06-23 03:35:54 +02:00
|
|
|
# hubot (aggiungi[mi] / crea) (il mio / [tra]i contatto/i) [telefono] - chiedi ad hubot creare il tuo contatto
|
2015-06-23 01:07:54 +02:00
|
|
|
#
|
|
|
|
# Author:
|
|
|
|
# Michele Guerini Rocco (rnhmjoj)
|
|
|
|
#
|
|
|
|
|
|
|
|
net = require 'net'
|
|
|
|
|
|
|
|
module.exports = (robot) ->
|
|
|
|
|
2015-06-24 02:13:39 +02:00
|
|
|
# format a name a telegram-cli likes it
|
|
|
|
norm = (x) -> x.replace /\ /g, '_'
|
|
|
|
|
2015-06-23 01:07:54 +02:00
|
|
|
# directly run a command in telegram-cli and return its output
|
|
|
|
# (a list of strings)
|
|
|
|
run_command = (command, callback) ->
|
2015-06-23 01:10:36 +02:00
|
|
|
client = net.connect robot.adapter.port, robot.adapter.host, ->
|
|
|
|
client.write command+'\n'
|
2015-06-23 01:07:54 +02:00
|
|
|
client.setEncoding 'utf8'
|
|
|
|
client.on 'data', (reply) ->
|
|
|
|
if callback?
|
|
|
|
callback (reply.split '\n')[1..-3]
|
|
|
|
client.end()
|
|
|
|
|
2015-06-24 02:14:53 +02:00
|
|
|
# return an object with the known chat information
|
|
|
|
chat_info = (name, callback) ->
|
|
|
|
run_command "chat_info #{norm name}", (data) ->
|
|
|
|
match = data[0].match ///
|
|
|
|
Chat\ (\w+(\ ?\w+)*) # chat name
|
|
|
|
\ \(id\ (\d+)\) # chat id
|
|
|
|
///
|
|
|
|
chat =
|
|
|
|
name: match[1]
|
|
|
|
id: 'chat#'+match[3]
|
|
|
|
members: data[1..].map (i) -> (i.split ' invited')[0].replace /\t/g, ''
|
|
|
|
robot.logger.info 'parsed chat data: ' + JSON.stringify chat, null, 2
|
|
|
|
callback chat
|
|
|
|
|
2015-06-23 01:07:54 +02:00
|
|
|
# return an object with the known user information
|
2015-06-24 02:13:39 +02:00
|
|
|
user_info = (name, callback) ->
|
|
|
|
run_command "user_info #{norm name}", (data) ->
|
2015-06-23 01:07:54 +02:00
|
|
|
match = (data.join '\n').match ///
|
2015-06-23 03:18:23 +02:00
|
|
|
User\ (\w+(\ ?\w+)*) # contact name
|
2015-06-23 01:07:54 +02:00
|
|
|
(\ @(\w+))? # telegram username
|
|
|
|
(\ \(\#(\d+)\))? # telegram id
|
|
|
|
[\s\S]+phone:\ (\d+)? # phone number
|
|
|
|
///
|
|
|
|
user =
|
|
|
|
name: match[1]
|
|
|
|
username: match[4]
|
2015-06-24 02:13:39 +02:00
|
|
|
id: 'user#'+match[6]
|
2015-06-23 01:07:54 +02:00
|
|
|
phone: match[7]
|
|
|
|
robot.logger.info 'parsed user data: ' + JSON.stringify user, null, 2
|
|
|
|
callback user
|
|
|
|
|
2015-06-24 02:13:39 +02:00
|
|
|
# get hubot telegram profile information
|
|
|
|
robot_info = (callback) ->
|
|
|
|
run_command 'get_self', (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: 'user#'+match[6]
|
|
|
|
phone: match[7]
|
|
|
|
robot.logger.info 'parsed robot data: ' + JSON.stringify user, null, 2
|
|
|
|
callback user
|
|
|
|
|
|
|
|
# return the list of active chat groups
|
|
|
|
chat_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
|
|
|
|
|
2015-06-23 03:35:54 +02:00
|
|
|
# add a user to the contact list
|
|
|
|
add_contact = (name, phone, callback) ->
|
|
|
|
robot.logger.info "create contact for user #{name}"
|
2015-06-24 02:13:39 +02:00
|
|
|
user_info name, (user) ->
|
2015-06-23 03:35:54 +02:00
|
|
|
[first, last...] = user.name.split ' '
|
2015-06-23 22:44:39 +02:00
|
|
|
phone = phone or user.phone
|
2015-06-23 03:35:54 +02:00
|
|
|
if not phone?
|
|
|
|
return callback 'serve per forza il tuo numero'
|
|
|
|
run_command "add_contact #{phone} '#{first}' '#{last.join ' '}'", (reply) ->
|
|
|
|
robot.logger.info 'result: ' + reply
|
|
|
|
reply = reply[0].split ' '
|
|
|
|
if reply[0] is 'FAIL:'
|
|
|
|
return callback reply[1..]
|
|
|
|
callback()
|
|
|
|
|
2015-06-23 01:07:54 +02:00
|
|
|
robot.respond /chi sei/, (res) ->
|
2015-06-24 02:13:39 +02:00
|
|
|
robot_info (user) ->
|
|
|
|
username = if user.username? then " noto anche come #{user.username}" else ''
|
|
|
|
phone = if user.phone? then " chiamatemi al #{user.phone}. " else '. '
|
2015-06-23 01:07:54 +02:00
|
|
|
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) ->
|
2015-06-24 02:13:39 +02:00
|
|
|
user_info res.message.user.name, (user) ->
|
2015-06-23 01:07:54 +02:00
|
|
|
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']
|
2015-06-24 02:14:16 +02:00
|
|
|
chat_list (list) ->
|
2015-06-23 01:07:54 +02:00
|
|
|
res.send (res.random intro) + ':\n' + (list.map (i) -> '* '+i).join '\n'
|
|
|
|
|
2015-06-23 03:35:54 +02:00
|
|
|
robot.respond /(aggiungi(mi)?|crea) ((trai? (i )?contatti)|(il mio contatto))( (\d+))?/, (res) ->
|
|
|
|
add_contact res.message.user.name, res.match[8], (err) ->
|
|
|
|
if err?
|
|
|
|
res.send "c'è un problema: " + err
|
|
|
|
else
|
|
|
|
res.send "fatto!"
|
|
|
|
|
2015-06-23 23:05:19 +02:00
|
|
|
robot.respond /(mi )?invit(i|ami) (in|nel gruppo) ([^?]+)\??/, (res) ->
|
2015-06-23 01:34:09 +02:00
|
|
|
denied = ['BZBZ ADMIN-NOT-DETECTED', 'BZBZ IS-NOT-AUTHORIZED', 'BZBZ ACCESS-DENIED']
|
|
|
|
nope = ['ahahah NO', 'mai sentito questo?', 'invita anche me magari']
|
|
|
|
ok = ['provvedo subito', 'ok', 'certo', 'va bene']
|
2015-06-24 02:14:53 +02:00
|
|
|
done = ['fatto', 'ecco qui', 'ecco fatto']
|
|
|
|
|
|
|
|
user = res.message.user
|
|
|
|
name = res.match[4]
|
|
|
|
admin_id = process.env['ADMIN_ROOM'].replace ':', '#'
|
|
|
|
|
|
|
|
chat_list (list) ->
|
|
|
|
if not name in list
|
|
|
|
return res.send res.random nope
|
|
|
|
chat_info name, (chat) ->
|
|
|
|
if chat.id is admin_id
|
|
|
|
return res.send res.random denied
|
|
|
|
if user.name in chat.members
|
|
|
|
return res.send 'ma sei già nel gruppo... [facepalm]'
|
|
|
|
res.send res.random ok
|
|
|
|
|
|
|
|
run_command "chat_add_user #{chat.id} #{user.id}", (reply) ->
|
|
|
|
robot.logger.info "add user #{user.name} to chat #{chat.name}"
|
|
|
|
robot.logger.info 'result: ' + reply[0]
|
|
|
|
err = (reply[0].split ' ')[-1..][0]
|
|
|
|
if err is 'SUCCESS'
|
|
|
|
robot.messageRoom chat.id, res.random done
|
|
|
|
robot.messageRoom chat.id, 'benvento'
|
|
|
|
else if err is 'USER_NOT_MUTUAL_CONTACT'
|
|
|
|
res.send 'aah, non posso: ho bisogno del tuo contatto'
|
|
|
|
else
|
|
|
|
res.send "non sono riuscito, c'è un errore: #{reply[0]}"
|