aboutsummaryrefslogtreecommitdiff
path: root/modules/kick-rejoin.py
blob: 5e9555e3ac18c71ee7012fcb8478ffeb6dfd02dd (about) (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#--depends-on config

from src import ModuleManager, utils

DELAY = 5

rejoin_setting = utils.BoolSetting("kick-rejoin",
    "Whether or not I should rejoin channels I get kicked from")
delay_setting = utils.IntSetting("kick-rejoin-delay",
    "Amount of seconds to wait before rejoining a channel")

@utils.export("serverset", rejoin_setting)
@utils.export("serverset", delay_setting)
@utils.export("channelset", rejoin_setting)
@utils.export("channelset", delay_setting)
class Module(ModuleManager.BaseModule):
    def _should_rejoin(self, server, channel):
        return channel.get_setting("kick-rejoin",
            server.get_setting("kick-rejoin", False))
    def _get_delay(self, server, channel):
        return channel.get_setting("kick-rejoin-delay",
            server.get_setting("kick-rejoin-delay", DELAY))

    @utils.hook("self.kick")
    def on_kick(self, event):
        if self._should_rejoin(event["server"], event["channel"]):
            delay = self._get_delay(event["server"], event["channel"])
            self.timers.add("kick-rejoin", delay, server=event["server"],
                channel_name=event["channel"].name)

    @utils.hook("timer.kick-rejoin")
    def timer(self, event):
        event["server"].send_join(event["channel_name"])