[NEW] vCard support
[UPD] improved overall stability, no longer use threads
[UPD] no longer using tdlib messages and chats database — now correctly /leaving chats
[UPD] removed /info command because of vCards support
text="[MSG ID %s DELETE]"%update.message_ids.join(',')
@xmpp.send_message(update.chat_id.to_s,text)
@xmpp.incoming_message(update.chat_id.to_s,text)
end
# file msg -- symlink to download path #
@ -198,7 +194,7 @@ class TelegramClient
@logger.debugupdate.to_json
ifupdate.file.local.is_downloading_completedthen
fname=update.file.local.path.to_s
target="%s/%s%s"%[@@content_path,Digest::SHA256.hexdigest("Current user = %s, File ID = %s"%[@tg_login.to_s,update.file.remote.id]),File.extname(fname)]
@xmpp.presence(chat_id.to_s,nil,:chat,nil,@cache[:chats][chat_id].title.to_s)ifchat.type.instance_of?TD::Types::ChatType::BasicGrouporchat.type.instance_of?TD::Types::ChatType::Supergroup# send :chat status if its group/supergroup
self.process_user_info(chat.type.user_id)ifchat.type.instance_of?TD::Types::ChatType::Private# process user if its a private chat
@logger.info'Found %s sessions in database.'%@sessions.count
@ -88,20 +88,31 @@ class XMPPComponent
defmessage_handler(msg)
@logger.info'New message from [%s] to [%s]'%[msg.from,msg.to]
returnself.process_internal_command(msg.from.bare.to_s,msg.first_element_text('body'))ifmsg.to==@@transport.jid# treat message as internal command if received as transport jid
return@sessions[msg.from.bare.to_s].queue_message(msg.to.to_s,msg.first_element_text('body'))if@sessions.key?msg.from.bare.to_sand@sessions[msg.from.bare.to_s].online?# queue message for processing session is active for jid from
return@sessions[msg.from.bare.to_s].tg_outgoing(msg.to.to_s,msg.first_element_text('body'))#if @sessions.key? msg.from.bare.to_s and @sessions[msg.from.bare.to_s].online? # queue message for processing session is active for jid from
end
defpresence_handler(presence)
@logger.debug"New presence iq received"
@logger.debug(presence)
ifpresence.type==:subscribethenreply=presence.answer(false);reply.type=:subscribed;@@transport.send(reply);end# send "subscribed" reply to "subscribe" presence
ifpresence.to==@@transport.jidand@sessions.key?presence.from.bare.to_sandpresence.type==:unavailablethen@sessions[presence.from.bare.to_s].offline!;return;end# go offline when received offline presence from jabber user
ifpresence.to==@@transport.jidand@sessions.key?presence.from.bare.to_sandpresence.type==:unavailablethen@sessions[presence.from.bare.to_s].disconnect();return;end# go offline when received offline presence from jabber user
ifpresence.to==@@transport.jidand@sessions.key?presence.from.bare.to_sthen@sessions[presence.from.bare.to_s].connect();return;end# connect if we have session
defonline!()@logger.info"Connection established";@online=true;self.presence_update(nil,:subscribe);self.presence_update(nil,nil,nil,"Logged in as "+@tg_login.to_s)end
defonline!()@logger.info"Connection established";@online=true;self.presence(nil,:subscribe);self.presence(nil,nil,nil,"Logged in as "+@tg_login.to_s)end