File: automode.pl

package info (click to toggle)
weechat-scripts 20071011
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 400 kB
  • ctags: 377
  • sloc: python: 3,470; perl: 1,305; ruby: 270; makefile: 37
file content (46 lines) | stat: -rw-r--r-- 2,010 bytes parent folder | download
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
34
35
36
37
38
39
40
41
42
43
44
45
46
# A script which automatically changes IRC modes of other users when they join
# This script is BSD licensed.
# Konstantin Merenkov @ 16.09.2007 22:19:56 MSD
# kmerenkov AT gmail DOT com

use warnings;

weechat::register("auto-mode", "0.1", "", "A script which automatically changes IRC modes of other users when they join");
weechat::add_message_handler("JOIN", set_mode);

sub set_mode {
    my @argv = @_;
    # ~/.weechat/mode_list.txt is the file where you are supposed to keep your settings
    open(FILE, "<", $ENV{"HOME"}."/.weechat/mode_list.txt") || die $!;
    while(<FILE>) {
        chomp;
        # mode_list.txt has the following format:
        #     network channel mask mode
        # For example:
        #     freenode #weechat FlashCode!.* o
        # So, if FlashCode joins #weechat on freenode network, his mode will be set to o (channel operator).
        # Just make sure that you don't use spaces in any of your regex.
        # PS: Actually this code was never tested on freenode, but I hope
        #     that their JOIN doesn't differ from JOIN on other servers.
        if (m/(.+) (.+) (.+) (.+)/) {
            my ($server, $chan, $mask, $mode) = ($1, $2, $3, $4);
            if ($argv[0] eq $server) {
                if ($argv[1] =~ m/^:(.+)\!(.+) JOIN :(.+)$/) {
                    my ($inc_nick, $inc_mask, $inc_chan) = ($1, "$1!$2", $3);
                    if ($inc_mask =~ m/$mask/) {
                        weechat::command("/mode $inc_chan $mode $inc_nick", $inc_chan, $argv[0]);
                        last;
                    }
                }
                else {
                    weechat::print("Error parsing JOIN irc command:");
                    weechat::print("\tnetwork:\t$argv[0]");
                    weechat::print("\tirc line:\t$argv[1]");
                    weechat::print("Contact author of this script or feel free to fix it yourself");
                }
            }
        }
    }
    close(FILE);
    return weechat::PLUGIN_RC_OK;
}