@client.download_file(file.id)iffile# download it if already not
# forwards, replies and message id..
text="[Forward from %s] %s"%[self.format_username(update.message.forward_info.sender_user_id),text]ifupdate.message.forward_info.instance_of?TD::Types::MessageForwardInfo::MessageForwardedFromUser# fwd from user
text="[Forward from channel %s (%s)] %s"%[update.message.forward_info.chat_id.to_s,update.message.forward_info.author_signature.to_s,text]ifupdate.message.forward_info.instance_of?TD::Types::MessageForwardInfo::MessageForwardedPost# fwd from chat
text="[Reply to MSG %s] %s"%[update.message.reply_to_message_id.to_s,text]ifupdate.message.reply_to_message_id.to_i!=0# reply
text="| fwd %s | %s"%[self.format_username(update.message.forward_info.sender_user_id),text]ifupdate.message.forward_info.instance_of?TD::Types::MessageForwardInfo::MessageForwardedFromUser# fwd from user
text="| fwd %s(%s) | %s"%[self.format_chatname(update.message.forward_info.chat_id),update.message.forward_info.author_signature.to_s,text]ifupdate.message.forward_info.instance_of?TD::Types::MessageForwardInfo::MessageForwardedPost# fwd from chat
@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
@xmpp.presence(chat_id.to_s,nil,:chat,@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'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].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
returnself.process_internal_command(msg.from,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].tg_outgoing(msg.from,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)
@ -97,20 +97,27 @@ class XMPPComponent
@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].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
ifpresence.to==@@transport.jidand@sessions.key?presence.from.bare.to_sthen@sessions[presence.from.bare.to_s].request_tz(presence.from);@sessions[presence.from.bare.to_s].connect();return;end# connect if we have session
@ -245,6 +255,25 @@ class XMPPSession < XMPPComponent
returnvcard
end
## timezones ##
defrequest_tz(jid)
@logger.debug"Request timezone from JID %s"%jid.to_s
iq=Jabber::Iq.new
iq.type=:get
iq.to=jid
iq.from=@@transport.jid
iq.id='time_req_1'
iq.add_element("time",{"xmlns"=>"urn:xmpp:time"})
@logger.debugiq.to_s
@@transport.send(iq)
end
defset_tz(timezone)
@logger.debug"Set TZ to %s"%timezone
@timezone=timezone
@logger.debug"Resyncing contact list.."
@telegram.sync_status()
end
###########################################
@ -252,4 +281,5 @@ class XMPPSession < XMPPComponent
defonline?()@onlineend
defonline!()@logger.info"Connection established";@online=true;self.presence(nil,:subscribe);self.presence(nil,nil,nil,"Logged in as "+@tg_login.to_s)end