[SVN] Release 0.4.1
[UPD] [BROKE] New config to database is added, please, re-create it, it is broken! [UPD] `Long time ago` contacts now is offline instead of XA [ADD] Contacts last seen later than `status_xa_interval` (configurable via !configure) hours now have XA status
This commit is contained in:
@@ -22,14 +22,9 @@ from telethon.tl.functions.channels import ReadHistoryRequest as ReadHistoryChan
|
|||||||
from telethon.tl.functions.updates import GetDifferenceRequest
|
from telethon.tl.functions.updates import GetDifferenceRequest
|
||||||
from telethon.tl.functions.contacts import ResolveUsernameRequest
|
from telethon.tl.functions.contacts import ResolveUsernameRequest
|
||||||
|
|
||||||
import hashlib
|
import os, threading, queue, hashlib, time, datetime
|
||||||
import os
|
|
||||||
import queue
|
|
||||||
import threading
|
|
||||||
import time
|
|
||||||
from xmpp_tg.utils import localtime, display_tg_name
|
from xmpp_tg.utils import localtime, display_tg_name
|
||||||
|
|
||||||
from .utils import var_dump
|
|
||||||
import xmpp_tg.monkey
|
import xmpp_tg.monkey
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
@@ -171,12 +166,12 @@ class TelegramGateClient(TelegramClient):
|
|||||||
|
|
||||||
# Status Updates #
|
# Status Updates #
|
||||||
if type(obj) is UpdateUserStatus:
|
if type(obj) is UpdateUserStatus:
|
||||||
|
|
||||||
# process status update #
|
# process status update #
|
||||||
if type(obj.status) is UserStatusOnline:
|
if type(obj.status) is UserStatusOnline:
|
||||||
self._status_updates[str(obj.user_id)] = { 'status': None, 'message': 'Online' }
|
self._status_updates[str(obj.user_id)] = { 'status': None, 'message': 'Online' }
|
||||||
elif type(obj.status) is UserStatusOffline:
|
elif type(obj.status) is UserStatusOffline:
|
||||||
self._status_updates[str(obj.user_id)] = { 'status': 'away', 'message': localtime(obj.status.was_online).strftime('Last seen at %H:%M %d/%m/%Y') }
|
status = 'away' if datetime.datetime.utcnow() - obj.status.was_online < datetime.timedelta(hours = self.xmpp_gate.accounts[self.jid]['status_xa_interval'] ) else 'xa'
|
||||||
|
self._status_updates[str(obj.user_id)] = { 'status': status, 'message': localtime(obj.status.was_online).strftime('Last seen at %H:%M %d/%m/%Y') }
|
||||||
elif type(obj.status) is UserStatusRecently:
|
elif type(obj.status) is UserStatusRecently:
|
||||||
self._status_updates[str(obj.user_id)] = { 'status': 'dnd', 'message': 'Last seen recently' }
|
self._status_updates[str(obj.user_id)] = { 'status': 'dnd', 'message': 'Last seen recently' }
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -1,27 +1,20 @@
|
|||||||
import sqlite3
|
import re, sys, os, io, sqlite3, hashlib, time, datetime
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
import os
|
|
||||||
import io
|
|
||||||
import time
|
|
||||||
import hashlib
|
|
||||||
|
|
||||||
import sleekxmpp
|
|
||||||
from sleekxmpp.componentxmpp import ComponentXMPP
|
|
||||||
import xml.etree.ElementTree as ET
|
import xml.etree.ElementTree as ET
|
||||||
|
|
||||||
|
from sleekxmpp.componentxmpp import ComponentXMPP
|
||||||
|
from sleekxmpp import Presence, Message
|
||||||
|
|
||||||
from telethon.tl.functions.messages import GetDialogsRequest, SendMessageRequest, SendMediaRequest, EditMessageRequest, DeleteMessagesRequest, ImportChatInviteRequest, GetFullChatRequest, AddChatUserRequest, DeleteChatUserRequest, CreateChatRequest, DeleteHistoryRequest
|
from telethon.tl.functions.messages import GetDialogsRequest, SendMessageRequest, SendMediaRequest, EditMessageRequest, DeleteMessagesRequest, ImportChatInviteRequest, GetFullChatRequest, AddChatUserRequest, DeleteChatUserRequest, CreateChatRequest, DeleteHistoryRequest
|
||||||
from telethon.tl.functions.account import UpdateStatusRequest, GetAuthorizationsRequest, UpdateProfileRequest, UpdateUsernameRequest
|
from telethon.tl.functions.account import UpdateStatusRequest, GetAuthorizationsRequest, UpdateProfileRequest, UpdateUsernameRequest
|
||||||
from telethon.tl.functions.contacts import DeleteContactRequest, BlockRequest, UnblockRequest, ImportContactsRequest
|
from telethon.tl.functions.contacts import DeleteContactRequest, BlockRequest, UnblockRequest, ImportContactsRequest
|
||||||
from telethon.tl.functions.channels import JoinChannelRequest, LeaveChannelRequest, InviteToChannelRequest, EditBannedRequest, CreateChannelRequest, DeleteMessagesRequest as DeleteMessagesChannel
|
from telethon.tl.functions.channels import JoinChannelRequest, LeaveChannelRequest, InviteToChannelRequest, EditBannedRequest, CreateChannelRequest, DeleteMessagesRequest as DeleteMessagesChannel
|
||||||
|
|
||||||
from telethon.tl.types import InputPeerEmpty, InputPeerUser, InputPeerChat, InputPeerChannel, InputPhoneContact
|
from telethon.tl.types import InputPeerEmpty, InputPeerUser, InputPeerChat, InputPeerChannel, InputPhoneContact, InputMediaPhotoExternal
|
||||||
from telethon.tl.types import User, Chat, Channel
|
from telethon.tl.types import User, Chat, Channel
|
||||||
from telethon.tl.types import PeerChannel, PeerChat, PeerUser, Chat, ChatForbidden, Channel, ChannelForbidden
|
from telethon.tl.types import PeerChannel, PeerChat, PeerUser, Chat, ChatForbidden, Channel, ChannelForbidden, ChannelBannedRights
|
||||||
from telethon.tl.types import UserStatusOnline, UserStatusRecently, UserStatusOffline
|
from telethon.tl.types import UserStatusOnline, UserStatusRecently, UserStatusOffline
|
||||||
from telethon.tl.types import Updates, UpdateShortSentMessage, UpdateMessageID
|
from telethon.tl.types import Updates, UpdateShortSentMessage, UpdateMessageID
|
||||||
from telethon.tl.types import ChannelBannedRights
|
|
||||||
from telethon.tl.types import InputMediaPhotoExternal
|
|
||||||
from telethon.tl.types.messages import Dialogs, DialogsSlice
|
from telethon.tl.types.messages import Dialogs, DialogsSlice
|
||||||
|
|
||||||
from telethon.helpers import generate_random_long
|
from telethon.helpers import generate_random_long
|
||||||
@@ -585,7 +578,7 @@ class XMPPTelegram(ComponentXMPP):
|
|||||||
|
|
||||||
def roster_exchange(self, tojid, contacts):
|
def roster_exchange(self, tojid, contacts):
|
||||||
|
|
||||||
message = sleekxmpp.Message()
|
message = Message()
|
||||||
message['from'] = self.boundjid.bare
|
message['from'] = self.boundjid.bare
|
||||||
message['to'] = tojid
|
message['to'] = tojid
|
||||||
rawxml = "<x xmlns='http://jabber.org/protocol/rosterx'>"
|
rawxml = "<x xmlns='http://jabber.org/protocol/rosterx'>"
|
||||||
@@ -601,7 +594,7 @@ class XMPPTelegram(ComponentXMPP):
|
|||||||
def roster_fill(self, tojid, contacts):
|
def roster_fill(self, tojid, contacts):
|
||||||
|
|
||||||
for jid, nick in contacts.items():
|
for jid, nick in contacts.items():
|
||||||
presence = sleekxmpp.Presence()
|
presence = Presence()
|
||||||
presence['from'] = jid
|
presence['from'] = jid
|
||||||
presence['to'] = tojid
|
presence['to'] = tojid
|
||||||
presence['type'] = 'subscribe'
|
presence['type'] = 'subscribe'
|
||||||
@@ -694,9 +687,10 @@ class XMPPTelegram(ComponentXMPP):
|
|||||||
elif type(usr.status) is UserStatusRecently:
|
elif type(usr.status) is UserStatusRecently:
|
||||||
self.send_presence(pto=jid, pfrom=u_jid, pshow='dnd', pstatus='Last seen recently')
|
self.send_presence(pto=jid, pfrom=u_jid, pshow='dnd', pstatus='Last seen recently')
|
||||||
elif type(usr.status) is UserStatusOffline:
|
elif type(usr.status) is UserStatusOffline:
|
||||||
self.send_presence(pto=jid, pfrom=u_jid, pshow='away', pstatus=localtime(usr.status.was_online).strftime('Last seen at %H:%M %d/%m/%Y') )
|
phow = 'away' if datetime.datetime.utcnow() - usr.status.was_online < datetime.timedelta(hours = self.accounts[jid]['status_xa_interval'] ) else 'xa'
|
||||||
|
self.send_presence(pto=jid, pfrom=u_jid, pshow=phow, pstatus=localtime(usr.status.was_online).strftime('Last seen at %H:%M %d/%m/%Y') )
|
||||||
else:
|
else:
|
||||||
self.send_presence(pto=jid, pfrom=u_jid, pshow='xa', pstatus='Last seen a long time ago')
|
self.send_presence(pto=jid, pfrom=u_jid, ptype='unavailable', pstatus='Last seen a long time ago')
|
||||||
|
|
||||||
if type(dlg.peer) in [PeerChat, PeerChannel]:
|
if type(dlg.peer) in [PeerChat, PeerChannel]:
|
||||||
cht = None
|
cht = None
|
||||||
@@ -799,7 +793,7 @@ class XMPPTelegram(ComponentXMPP):
|
|||||||
return (msg_id, edited)
|
return (msg_id, edited)
|
||||||
|
|
||||||
def publish_photo(self, jid, fromjid, photo):
|
def publish_photo(self, jid, fromjid, photo):
|
||||||
presence = sleekxmpp.Presence()
|
presence = Presence()
|
||||||
presence['to'] = jid
|
presence['to'] = jid
|
||||||
presence['from'] = fromjid
|
presence['from'] = fromjid
|
||||||
presence.appendxml(ET.fromstring("<x xmlns='vcard-temp:x:update'><photo>%s</photo></x>" % photo))
|
presence.appendxml(ET.fromstring("<x xmlns='vcard-temp:x:update'><photo>%s</photo></x>" % photo))
|
||||||
@@ -820,6 +814,6 @@ class XMPPTelegram(ComponentXMPP):
|
|||||||
conn = sqlite3.connect(self.config['db_connect'], isolation_level=None, check_same_thread=False)
|
conn = sqlite3.connect(self.config['db_connect'], isolation_level=None, check_same_thread=False)
|
||||||
conn.row_factory = dict_factory
|
conn.row_factory = dict_factory
|
||||||
|
|
||||||
conn.execute("CREATE TABLE IF NOT EXISTS accounts(jid VARCHAR(255), tg_phone VARCHAR(25), use_roster_exchange BOOLEAN default false, keep_online BOOLEAN default false, status_update_interval INTEGER default 30, enable_avatars BOOLEAN default false)")
|
conn.execute("CREATE TABLE IF NOT EXISTS accounts(jid VARCHAR(255), tg_phone VARCHAR(25), use_roster_exchange BOOLEAN default false, keep_online BOOLEAN default false, status_update_interval INTEGER default 30, status_xa_interval INTEGER default 24, enable_avatars BOOLEAN default false)")
|
||||||
|
|
||||||
return conn
|
return conn
|
||||||
|
|||||||
Reference in New Issue
Block a user