bitbot-3.11-fork/modules/line_handler/channel.py

167 lines
6 KiB
Python
Raw Normal View History

from src import utils
def handle_332(events, event):
channel = event["server"].channels.get(event["args"][1])
topic = event["args"].get(2)
channel.set_topic(topic)
events.on("received.332").call(channel=channel, server=event["server"],
topic=topic)
def topic(events, event):
2019-06-03 12:30:39 +00:00
user = event["server"].get_user(event["source"].nickname)
channel = event["server"].channels.get(event["args"][0])
topic = event["args"].get(1)
channel.set_topic(topic)
events.on("received.topic").call(channel=channel, server=event["server"],
topic=topic, user=user)
def handle_333(events, event):
channel = event["server"].channels.get(event["args"][1])
2019-03-03 22:46:24 +00:00
topic_setter = utils.irc.seperate_hostmask(event["args"][2])
topic_time = int(event["args"][3]) if event["args"][3].isdigit() else None
channel.set_topic_setter(topic_setter.nickname, topic_setter.username,
topic_setter.hostname)
channel.set_topic_time(topic_time)
events.on("received.333").call(channel=channel,
setter=topic_setter.nickname, set_at=topic_time, server=event["server"])
def handle_353(event):
channel = event["server"].channels.get(event["args"][2])
nicknames = event["args"].get(3).split(" ")
# there can sometimes be a dangling space at the end of a 353
if nicknames and not nicknames[-1]:
nicknames.pop(-1)
for nickname in nicknames:
modes = set([])
while nickname[0] in event["server"].prefix_symbols:
modes.add(event["server"].prefix_symbols[nickname[0]])
nickname = nickname[1:]
if event["server"].has_capability_str("userhost-in-names"):
hostmask = utils.irc.seperate_hostmask(nickname)
nickname = hostmask.nickname
user = event["server"].get_user(hostmask.nickname)
user.username = hostmask.username
user.hostname = hostmask.hostname
else:
user = event["server"].get_user(nickname)
user.join_channel(channel)
channel.add_user(user)
for mode in modes:
channel.add_mode(mode, nickname)
def handle_366(event):
event["server"].send_whox(event["args"][1], "n", "ahnrtu", "111")
def join(events, event):
account = None
realname = None
channel_name = event["args"][0]
if len(event["args"]) == 3:
if not event["args"][1] == "*":
account = event["args"][1]
realname = event["args"][2]
2019-06-03 12:30:39 +00:00
user = event["server"].get_user(event["source"].nickname)
2019-06-03 12:30:39 +00:00
user.username = event["source"].username
user.hostname = event["source"].hostname
if account:
user.identified_account = account
user.identified_account_id = event["server"].get_user(account).get_id()
if realname:
user.realname = realname
2019-06-03 12:30:39 +00:00
is_self = event["server"].is_own_nickname(event["source"].nickname)
if is_self:
channel = event["server"].channels.add(channel_name)
else:
channel = event["server"].channels.get(channel_name)
channel.add_user(user)
user.join_channel(channel)
if is_self:
if channel.name in event["server"].attempted_join:
del event["server"].attempted_join[channel.name]
events.on("self.join").call(channel=channel, server=event["server"],
account=account, realname=realname)
channel.send_mode()
else:
events.on("received.join").call(channel=channel, user=user,
server=event["server"], account=account, realname=realname)
def part(events, event):
channel = event["server"].channels.get(event["args"][0])
2019-06-03 12:30:39 +00:00
user = event["server"].get_user(event["source"].nickname)
reason = event["args"].get(1)
channel.remove_user(user)
user.part_channel(channel)
if not len(user.channels):
event["server"].remove_user(user)
2019-06-03 12:30:39 +00:00
if not event["server"].is_own_nickname(event["source"].nickname):
events.on("received.part").call(channel=channel, reason=reason,
user=user, server=event["server"])
else:
event["server"].channels.remove(channel)
events.on("self.part").call(channel=channel, reason=reason,
server=event["server"])
def handle_324(event):
if event["args"][1] in event["server"].channels:
channel = event["server"].channels.get(event["args"][1])
modes = event["args"][2]
for mode in modes[1:]:
if mode in event["server"].channel_modes:
channel.add_mode(mode)
def handle_329(event):
channel = event["server"].channels.get(event["args"][1])
channel.creation_timestamp = int(event["args"][2])
def handle_477(timers, event):
channel_name = event["server"].irc_lower(event["args"][1])
if channel_name in event["server"].channels:
key = event["server"].attempted_join[channel_name]
timers.add("rejoin", 5, channel_name=channe_name, key=key,
server_id=event["server"].id)
def kick(events, event):
2019-06-03 12:30:39 +00:00
user = event["server"].get_user(event["source"].nickname)
target = event["args"][1]
channel = event["server"].channels.get(event["args"][0])
reason = event["args"].get(2)
target_user = event["server"].get_user(target)
if not event["server"].is_own_nickname(target):
events.on("received.kick").call(channel=channel, reason=reason,
target_user=target_user, user=user, server=event["server"])
else:
event["server"].channels.remove(channel)
events.on("self.kick").call(channel=channel, reason=reason, user=user,
server=event["server"])
channel.remove_user(target_user)
target_user.part_channel(channel)
if not len(target_user.channels):
event["server"].remove_user(target_user)
def rename(events, event):
old_name = event["args"][0]
new_name = event["args"][1]
channel = event["server"].channels.get(old_name)
event["server"].channels.rename(old_name, new_name)
events.on("received.rename").call(channel=channel, old_name=old_name,
new_name=new_name, reason=event["args"].get(2), server=event["server"])