code
This commit is contained in:
@@ -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))
|
||||||
|
|||||||
Reference in New Issue
Block a user