diff options
| author | 2019-12-10 05:27:35 +0000 | |
|---|---|---|
| committer | 2019-12-10 05:27:35 +0000 | |
| commit | 638eee0d685c06d258cb55287204ca97bca7c344 (patch) | |
| tree | 33442439317ae2846f1efb7674b7a3758c8990a1 /src/core_modules/line_handler/channel.py | |
| parent | move sys.exit() codes to an enum in utils.consts (diff) | |
| signature | ||
move core modules to src/core_modules, make them uneffected by white/black list
Diffstat (limited to 'src/core_modules/line_handler/channel.py')
| -rw-r--r-- | src/core_modules/line_handler/channel.py | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/src/core_modules/line_handler/channel.py b/src/core_modules/line_handler/channel.py new file mode 100644 index 00000000..91150839 --- /dev/null +++ b/src/core_modules/line_handler/channel.py @@ -0,0 +1,160 @@ +from src import IRCLine, utils + +def handle_332(events, event): + channel = event["server"].channels.get(event["line"].args[1]) + topic = event["line"].args.get(2) + channel.set_topic(topic) + events.on("received.332").call(channel=channel, server=event["server"], + topic=topic) + +def topic(events, event): + user = event["server"].get_user(event["line"].source.nickname) + channel = event["server"].channels.get(event["line"].args[0]) + topic = event["line"].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["line"].args[1]) + + topic_setter = IRCLine.parse_hostmask(event["line"].args[2]) + topic_time = int(event["line"].args[3]) + + channel.set_topic_setter(topic_setter) + channel.set_topic_time(topic_time) + events.on("received.333").call(channel=channel, + setter=topic_setter, set_at=topic_time, server=event["server"]) + +def handle_353(event): + channel = event["server"].channels.get(event["line"].args[2]) + nicknames = event["line"].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 = IRCLine.parse_hostmask(nickname) + nickname = hostmask.nickname + user = event["server"].get_user(hostmask.nickname, + username=hostmask.username, 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["line"].args[1], "n", "ahnrtu", "111") + +def join(events, event): + account = None + realname = None + channel_name = event["line"].args[0] + + if len(event["line"].args) == 3: + if not event["line"].args[1] == "*": + account = event["line"].args[1] + realname = event["line"].args[2] + + user = event["server"].get_user(event["line"].source.nickname, + username=event["line"].source.username, + hostname=event["line"].source.hostname) + + if account: + user.account = account + if realname: + user.realname = realname + + is_self = event["server"].is_own_nickname(event["line"].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: + 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["line"].args[0]) + user = event["server"].get_user(event["line"].source.nickname) + reason = event["line"].args.get(1) + + channel.remove_user(user) + user.part_channel(channel) + if not len(user.channels): + event["server"].remove_user(user) + + if not event["server"].is_own_nickname(event["line"].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(events, event): + if event["line"].args[1] in event["server"].channels: + channel = event["server"].channels.get(event["line"].args[1]) + modes = event["line"].args[2] + args = event["line"].args[3:] + new_modes = channel.parse_modes(modes, args[:]) + events.on("received.324").call(modes=new_modes, + channel=channel, server=event["server"], mode_str=modes, + args_str=args) + +def handle_329(event): + channel = event["server"].channels.get(event["line"].args[1]) + channel.creation_timestamp = int(event["line"].args[2]) + +def handle_477(timers, event): + pass + +def kick(events, event): + user = event["server"].get_user(event["line"].source.nickname) + target = event["line"].args[1] + channel = event["server"].channels.get(event["line"].args[0]) + reason = event["line"].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["line"].args[0] + new_name = event["line"].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["line"].args.get(2), + server=event["server"]) |
