18
18
# This script allows to change your nick on the different networks you are
19
19
# connected, by appending or removing a suffix to your current nick on the
20
20
# network, based on the defined mask
21
- # Command: /mnick [suffix]
21
+ # Command: /mnick [suffix] [away reason]
22
22
# * if suffix is set and script enabled on network, will do a
23
23
# /nick <current_nick><formatted_suffix>
24
24
# * if suffix is not set, will do a
27
27
# Settings:
28
28
# * plugins.var.perl.mnick.<network>_enabled : on/off
29
29
# * plugins.var.perl.mnick.<network>_mask : default [%s]
30
+ # * plugins.var.perl.mnick.<network>_away : on/off
30
31
#
31
32
# Example
32
33
# I'm CrazyCat on net1 and net3, GatoLoco on net2
33
34
# * plugins.var.perl.mnick.net1_enabled : on
34
35
# * plugins.var.perl.mnick.net1_mask : [%s]
36
+ # * plugins.var.perl.mnick.net1_away : off
35
37
# * plugins.var.perl.mnick.net2_enabled : on
36
38
# * plugins.var.perl.mnick.net2_mask : |%s
37
- # * plugins.var.perl.mnick.net3_enabled : off
39
+ # * plugins.var.perl.mnick.net1_away : off
40
+ # * plugins.var.perl.mnick.net3_enabled : on
38
41
# * plugins.var.perl.mnick.net3_mask : [%s]
39
- # /mnick AFK
42
+ # * plugins.var.perl.mnick.net1_away : on
43
+ # /mnick Test
44
+ # => CrazyCat[Test] on net1, GatoLoco|Test on net2, CrazyCat on net3
45
+ # => Away status won't change
46
+ # /mnick AFK I'm no more here
40
47
# => CrazyCat[AFK] on net1, GatoLoco|AFK on net2, CrazyCat on net3
48
+ # => I'll be turned away on net2 and net3 with "I'm no more here" reason
49
+ # /mnick Test
50
+ # => CrazyCat[Test] on net1, GatoLoco|Test on net2, CrazyCat on net3
51
+ # => Away status won't change (keep the previous one)
41
52
# /mnick
42
53
# => CrazyCat on net1 and net3, GatoLoco on net2
54
+ # => away status is removed on net2 and net3
43
55
#
44
56
# History:
57
+ # 2019-09-12, CrazyCat <crazycat@c-p-f.org>
58
+ # version 0.4 : add an optionnal away reason
45
59
# 2016-05-23, CrazyCat <crazycat@c-p-f.org>:
46
60
# version 0.3 : now, you can use alternate nick without doing
47
61
# a /mnick before
51
65
# 2014-04-01, CrazyCat <crazycat@c-p-f.org>:
52
66
# version 0.1 : first official version
53
67
54
- weechat::register(" mnick" , " CrazyCat" , " 0.3" , " GPL" , " Multi Nick Changer" , " " , " " );
68
+ weechat::register(" mnick" , " CrazyCat" , " 0.4" , " GPL" , " Multi Nick Changer" , " " , " " );
69
+
55
70
weechat::hook_command(
56
71
" mnick" ,
57
72
" Multi Nick Changer" ,
58
- " mnick [extension]" ,
73
+ " mnick [extension] [away reason] " ,
59
74
" " ,
60
75
" " ,
61
76
" mnick_change" ,
@@ -76,21 +91,33 @@ sub mnick_setup
76
91
{
77
92
weechat::config_set_plugin($ name . " _enabled" , " off" );
78
93
}
94
+ if (! weechat::config_is_set_plugin($ name . " _away" ))
95
+ {
96
+ weechat::config_set_plugin($ name . " _away" , " off" );
97
+ }
79
98
}
80
99
weechat::infolist_free($ infolist );
81
100
}
82
101
83
102
sub mnick_change
84
103
{
85
- my ($ data , $ buffer , $ text ) = @ _ ;
104
+ my ($ data , $ buffer , $ args ) = @ _ ;
105
+ my $ ext ;
106
+ my @ reason ;
107
+ if ($ args ne " " ) {
108
+ ($ ext , @ reason ) = split (" " , $ args );
109
+ }
86
110
my $ newnick ;
87
111
my $ nick ;
112
+ my @ nicks ;
113
+ my $ name ;
114
+ my $ hasreason = @ reason ;
88
115
$ infolist = weechat::infolist_get(" irc_server" , " " , " " );
89
- if ($ text )
116
+ if ($ ext )
90
117
{
91
118
while (weechat::infolist_next($ infolist ))
92
119
{
93
- my $ name = weechat::infolist_string($ infolist , " name" );
120
+ $ name = weechat::infolist_string($ infolist , " name" );
94
121
if (weechat::config_is_set_plugin($ name . " _enabled" )
95
122
&& weechat::config_get_plugin($ name . " _enabled" ) eq " on"
96
123
&& weechat::infolist_integer($ infolist , " is_connected" )== 1 )
@@ -100,17 +127,25 @@ sub mnick_change
100
127
{
101
128
$ nick = weechat::info_get(' irc_nick' , $ name );
102
129
weechat::config_set_plugin($ name . " _backnick" , $ nick );
130
+
103
131
} else {
104
132
$ nick = weechat::config_get_plugin($ name . " _backnick" );
105
133
}
106
- $ newnick = sprintf ($ nick . weechat::config_get_plugin($ name . " _mask" ), $ text );
134
+ $ newnick = sprintf ($ nick . weechat::config_get_plugin($ name . " _mask" ), $ ext );
107
135
weechat::command($ name , " /quote -server " . $ name . " nick " . $ newnick );
108
136
}
137
+ if ( $ hasreason != 0
138
+ && weechat::infolist_integer($ infolist , " is_connected" )== 1
139
+ && weechat::config_is_set_plugin($ name . " _away" )
140
+ && weechat::config_get_plugin($ name . " _away" ) eq " on" )
141
+ {
142
+ weechat::command($ name , " /quote -server " . $ name . " away :" . join (" " , @ reason ));
143
+ }
109
144
}
110
145
} else {
111
146
while (weechat::infolist_next($ infolist ))
112
147
{
113
- my $ name = weechat::infolist_string($ infolist , " name" );
148
+ $ name = weechat::infolist_string($ infolist , " name" );
114
149
$ nick = weechat::info_get(' irc_nick' , $ name );
115
150
if (weechat::config_is_set_plugin($ name . " _enabled" )
116
151
&& weechat::config_get_plugin($ name . " _enabled" ) eq " on"
@@ -126,6 +161,12 @@ sub mnick_change
126
161
weechat::command($ name , " /quote -server " . $ name . " nick " . $ newnick );
127
162
weechat::config_set_plugin($ name . " _backnick" , " " );
128
163
}
164
+ if ( weechat::infolist_integer($ infolist , " is_connected" )== 1
165
+ && weechat::config_is_set_plugin($ name . " _away" )
166
+ && weechat::config_get_plugin($ name . " _away" ) eq " on" )
167
+ {
168
+ weechat::command($ name , " /quote -server " . $ name . " away" );
169
+ }
129
170
}
130
171
}
131
172
weechat::infolist_free($ infolist );
0 commit comments