Properly handle the bot's host change
This commit is contained in:
parent
e0ea1f00e4
commit
64eb34a61a
19
src/hooks.py
19
src/hooks.py
@ -159,6 +159,25 @@ def end_who(cli, bot_server, bot_nick, target, rest):
|
|||||||
|
|
||||||
Event("who_end", {}).dispatch(var, target)
|
Event("who_end", {}).dispatch(var, target)
|
||||||
|
|
||||||
|
### Host changing handling
|
||||||
|
|
||||||
|
@hook("event_hosthidden")
|
||||||
|
def host_hidden(cli, server, nick, host, message):
|
||||||
|
"""Properly update the bot's knowledge of itself.
|
||||||
|
|
||||||
|
Ordering and meaning of arguments for a host hidden event:
|
||||||
|
|
||||||
|
0 - The IRCClient instance (like everywhere else)
|
||||||
|
1 - The server the bot is on
|
||||||
|
2 - The user's nick (i.e. the bot's nick)
|
||||||
|
3 - The new host we are now using
|
||||||
|
4 - A human-friendly message (e.g. "is now your hidden host")
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert nick == users.Bot.nick
|
||||||
|
users.Bot = users.Bot.with_host(host)
|
||||||
|
|
||||||
### Server PING handling
|
### Server PING handling
|
||||||
|
|
||||||
@hook("ping")
|
@hook("ping")
|
||||||
|
@ -594,6 +594,14 @@ class BotUser(User): # TODO: change all the 'if x is Bot' for 'if isinstance(x,
|
|||||||
self.modes = set()
|
self.modes = set()
|
||||||
return self
|
return self
|
||||||
|
|
||||||
|
def with_host(self, host):
|
||||||
|
"""Create a new bot instance with a new host."""
|
||||||
|
new = super().__new__(type(self), self.client, self.nick, self.ident, host, self.realname, self.account)
|
||||||
|
if new is not self:
|
||||||
|
new.modes = set(self.modes)
|
||||||
|
new.channels = {chan: set(modes) for chan, modes in self.channels.items()}
|
||||||
|
return new
|
||||||
|
|
||||||
def lower(self):
|
def lower(self):
|
||||||
temp = type(self)(self.client, lower(self.nick))
|
temp = type(self)(self.client, lower(self.nick))
|
||||||
if temp is not self:
|
if temp is not self:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user