Implement Telegram -> Matrix formatted message bridging
This commit is contained in:
@@ -27,9 +27,10 @@ class User:
|
||||
by_mxid = {}
|
||||
by_tgid = {}
|
||||
|
||||
def __init__(self, mxid, tgid=None):
|
||||
def __init__(self, mxid, tgid=None, username=None):
|
||||
self.mxid = mxid
|
||||
self.tgid = tgid
|
||||
self.username = username
|
||||
|
||||
self.command_status = None
|
||||
self.connected = False
|
||||
@@ -44,7 +45,7 @@ class User:
|
||||
return self.client.is_user_authorized()
|
||||
|
||||
def to_db(self):
|
||||
return self.db.merge(DBUser(self.mxid, self.tgid))
|
||||
return self.db.merge(DBUser(mxid=self.mxid, tgid=self.tgid, tg_username=self.username))
|
||||
|
||||
def save(self):
|
||||
self.to_db()
|
||||
@@ -52,7 +53,7 @@ class User:
|
||||
|
||||
@classmethod
|
||||
def from_db(cls, db_user):
|
||||
return User(db_user.mxid, db_user.tgid)
|
||||
return User(db_user.mxid, db_user.tgid, db_user.tg_username)
|
||||
|
||||
def start(self):
|
||||
self.client = TelegramClient(self.mxid,
|
||||
@@ -62,9 +63,27 @@ class User:
|
||||
self.connected = self.client.connect()
|
||||
if self.logged_in:
|
||||
self.sync_dialogs()
|
||||
self.update_info()
|
||||
self.client.add_update_handler(self.update_catch)
|
||||
return self
|
||||
|
||||
def update_info(self, info=None):
|
||||
info = info or self.client.get_me()
|
||||
self.username = info.username
|
||||
if self.tgid != info.id:
|
||||
self.tgid = info.id
|
||||
self.by_tgid[self.tgid] = self
|
||||
self.save()
|
||||
|
||||
def log_out(self):
|
||||
self.connected = False
|
||||
if self.tgid:
|
||||
try:
|
||||
del self.tgid[self.tgid]
|
||||
except KeyError:
|
||||
pass
|
||||
return self.client.log_out()
|
||||
|
||||
def stop(self):
|
||||
self.client.disconnect()
|
||||
self.client = None
|
||||
@@ -137,6 +156,17 @@ class User:
|
||||
|
||||
return None
|
||||
|
||||
@classmethod
|
||||
def find_by_username(cls, username):
|
||||
for _, user in cls.by_tgid.items():
|
||||
if user.username == username:
|
||||
return user
|
||||
|
||||
puppet = DBUser.query.filter(DBUser.tg_username == username).one_or_none()
|
||||
if puppet:
|
||||
return cls.from_db(puppet)
|
||||
|
||||
return None
|
||||
|
||||
def init(context):
|
||||
global config
|
||||
|
||||
Reference in New Issue
Block a user