This commit is contained in:
2019-02-27 02:15:09 +01:00
parent a5fdac224f
commit 8ca6740cd1

View File

@@ -35,7 +35,7 @@ class MessageHandler():
xmpp.send_message(mto=self.replyto, mtype=self.type, mbody=text) xmpp.send_message(mto=self.replyto, mtype=self.type, mbody=text)
def debug(self, *args, **kwargs): def debug(self, *args, **kwargs):
"""nolistnolist Show debug info""" """nolist Show debug info"""
return pprint.pformat(self.__dict__) return pprint.pformat(self.__dict__)
def help(self, *args, **kwargs): def help(self, *args, **kwargs):
@@ -75,7 +75,7 @@ class MessageHandler():
docstring = "No description available" docstring = "No description available"
if docstring.startswith("nolist "): if docstring.startswith("nolist "):
continue continue
reply += "\n!{command} - {doc}".format(method, docstring.split("\n")[0] reply += "\n!{command} - {doc}".format(method, docstring.split("\n")[0])
return reply return reply
else: else:
method = getattr(self,self.arguments[0]) method = getattr(self,self.arguments[0])
@@ -362,3 +362,74 @@ class ChatCommandHandler(MessageHandler):
else: else:
del(self.tg_dialogs[hndl.jid]['messages'][hndl.tg_id]) del(self.tg_dialogs[hndl.jid]['messages'][hndl.tg_id])
self.tg_connections[hndl.jid].invoke( DeleteMessagesRequest([msg_id], revoke = True) ) self.tg_connections[hndl.jid].invoke( DeleteMessagesRequest([msg_id], revoke = True) )
class GroupchatCommandHandler(MessageHandler):
_helptext = "Available Groupchat commands:"
def __init__(self, msg):
super(GroupchatCommandHandler, self).__init__(msg)
if self._command.startswith("s/"):
self._handler = self._replace
def leave(hndl, self):
"""Leave group or channel"""
tg_id = int(hndl.msg['to'].node[1:])
if tg_id in self.tg_dialogs[hndl.jid]['supergroups']:
peer = InputPeerChannel(tg_id, self.tg_dialogs[hndl.jid]['supergroups'][tg_id].access_hash)
self.tg_connections[hndl.jid].invoke(LeaveChannelRequest(peer))
self.tg_connections[hndl.jid].invoke(DeleteHistoryRequest(peer, max_id = 0, just_clear = None))
c_jid = get_contact_jid(self.tg_dialogs[hndl.jid]['supergroups'][tg_id], self.boundjid.bare)
self.send_presence(pto =hndl.jid, pfrom = c_jid, ptype ='unavailable')
self.send_presence(pto =hndl.jid, pfrom = c_jid, ptype ='unsubscribed')
self.send_presence(pto =hndl.jid, pfrom = c_jid, ptype ='unsubscribe')
if tg_id in self.tg_dialogs[hndl.jid]['groups']:
self.tg_connections[hndl.jid].invoke(DeleteChatUserRequest(tg_id, self.tg_connections[hndl.jid].me))
self.tg_connections[hndl.jid].invoke(DeleteHistoryRequest(InputPeerChat(tg_id), max_id = 0, just_clear = None))
c_jid = get_contact_jid(self.tg_dialogs[hndl.jid]['groups'][tg_id], self.boundjid.bare)
self.send_presence(pto =hndl.jid, pfrom = c_jid, ptype ='unavailable')
self.send_presence(pto =hndl.jid, pfrom = c_jid, ptype ='unsubscribed')
self.send_presence(pto =hndl.jid, pfrom = c_jid, ptype ='unsubscribe')
def invite(hndl, self):
"""Invite user to group"""
tg_id = int(hndl.msg['to'].node[1:])
if tg_id in self.tg_dialogs[hndl.jid]['supergroups']:
invited_user = self.tg_connections[[hndl.jid]].get_entity(parsed[1])
if type(invited_user) == User:
self.tg_connections[[hndl.jid]].invoke(EditBannedRequest(InputPeerChannel(tg_id, self.tg_dialogs[[hndl.jid]]['supergroups'][tg_id].access_hash), invited_user, ChannelBannedRights(until_date=None, view_messages=False)))
self.tg_connections[[hndl.jid]].invoke(InviteToChannelRequest(InputPeerChannel(tg_id, self.tg_dialogs[[hndl.jid]]['supergroups'][tg_id].access_hash), [invited_user]))
if tg_id in self.tg_dialogs[[hndl.jid]]['groups']:
invited_user = self.tg_connections[[hndl.jid]].get_entity(parsed[1])
if type(invited_user) == User:
self.tg_connections[[hndl.jid]].invoke(AddChatUserRequest(tg_id, invited_user, 0))
def kick(hndl, self):
"""Kick user"""
tg_id = int(hndl.msg['to'].node[1:])
if tg_id in self.tg_dialogs[hndl.jid]['supergroups']:
kicked_user = self.tg_connections[hndl.jid].get_entity(parsed[1])
if type(kicked_user) == User:
self.tg_connections[hndl.jid].invoke(EditBannedRequest(InputPeerChannel(tg_id, self.tg_dialogs[hndl.jid]['supergroups'][tg_id].access_hash), kicked_user, ChannelBannedRights(until_date=None, view_messages=True)))
if tg_id in self.tg_dialogs[hndl.jid]['groups']:
kicked_user = self.tg_connections[hndl.jid].get_entity(parsed[1])
if type(kicked_user) == User:
self.tg_connections[hndl.jid].invoke(DeleteChatUserRequest(tg_id, kicked_user))
def _replace(hndl, self):
tg_id = int(hndl.msg['to'].node[1:])
peer = InputPeerChannel(tg_id, self.tg_dialogs[hndl.jid]['supergroups'][tg_id].access_hash) if tg_id in self.tg_dialogs[
hndl.jid]['supergroups'] else InputPeerChat(tg_id)
msg_id, edited = self.edit_message(hndl.jid, tg_id, iq['body'])
if not edited: return
# and send it
if edited != '' and edited != ' ':
self.tg_dialogs[hndl.jid]['messages'][tg_id]["body"] = edited
self.tg_connections[hndl.jid].invoke(EditMessageRequest(peer, msg_id, message = edited))
else:
del(self.tg_dialogs[hndl.jid]['messages'][tg_id])
if isinstance(peer, InputPeerChannel):
self.tg_connections[hndl.jid].invoke(DeleteMessagesChannel(peer, [msg_id]))
else:
self.tg_connections[hndl.jid].invoke(DeleteMessagesRequest([msg_id], revoke = True))