mirror of
https://github.com/jlu5/PyLink.git
synced 2024-11-23 19:19:31 +01:00
inspircd: support SAKICK
This commit is contained in:
parent
5800594d55
commit
c36c32082f
@ -24,7 +24,8 @@ class InspIRCdProtocol(TS6BaseProtocol):
|
|||||||
# are called with the right hooks.
|
# are called with the right hooks.
|
||||||
self.hook_map = {'FJOIN': 'JOIN', 'RSQUIT': 'SQUIT', 'FMODE': 'MODE',
|
self.hook_map = {'FJOIN': 'JOIN', 'RSQUIT': 'SQUIT', 'FMODE': 'MODE',
|
||||||
'FTOPIC': 'TOPIC', 'OPERTYPE': 'MODE', 'FHOST': 'CHGHOST',
|
'FTOPIC': 'TOPIC', 'OPERTYPE': 'MODE', 'FHOST': 'CHGHOST',
|
||||||
'FIDENT': 'CHGIDENT', 'FNAME': 'CHGNAME', 'SVSTOPIC': 'TOPIC'}
|
'FIDENT': 'CHGIDENT', 'FNAME': 'CHGNAME', 'SVSTOPIC': 'TOPIC',
|
||||||
|
'SAKICK': 'KICK'}
|
||||||
|
|
||||||
self.min_proto_ver = 1202
|
self.min_proto_ver = 1202
|
||||||
self.proto_ver = 1202
|
self.proto_ver = 1202
|
||||||
@ -769,5 +770,28 @@ class InspIRCdProtocol(TS6BaseProtocol):
|
|||||||
self.removeClient(killed)
|
self.removeClient(killed)
|
||||||
return {'target': killed, 'text': args[1], 'userdata': data}
|
return {'target': killed, 'text': args[1], 'userdata': data}
|
||||||
|
|
||||||
|
def handle_sakick(self, source, command, args):
|
||||||
|
"""Handles forced kicks (SAKICK)."""
|
||||||
|
# <- :1MLAAAAAD ENCAP 0AL SAKICK #test 0ALAAAAAB :test
|
||||||
|
# ENCAP -> SAKICK args: ['#test', '0ALAAAAAB', 'test']
|
||||||
|
|
||||||
|
target = args[1]
|
||||||
|
channel = self.irc.toLower(args[0])
|
||||||
|
try:
|
||||||
|
reason = args[2]
|
||||||
|
except IndexError:
|
||||||
|
# Kick reason is optional, strange...
|
||||||
|
reason = self.irc.getFriendlyName(source)
|
||||||
|
|
||||||
|
if not self.irc.isInternalClient(target):
|
||||||
|
log.warning("(%s) Got SAKICK for client that not one of ours: %s", self.irc.name, target)
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
# Like RSQUIT, SAKICK requires that the receiving server acknowledge that a kick has
|
||||||
|
# happened. This comes from the server hosting the target client.
|
||||||
|
server = self.irc.getServer(target)
|
||||||
|
|
||||||
|
self.kick(server, channel, target, reason)
|
||||||
|
return {'channel': channel, 'target': target, 'text': reason}
|
||||||
|
|
||||||
Class = InspIRCdProtocol
|
Class = InspIRCdProtocol
|
||||||
|
Loading…
Reference in New Issue
Block a user