1
0
mirror of https://github.com/weechat/weechat.git synced 2026-07-03 00:03:12 +02:00

Use IRC command arguments instead of full message for IRC redirection (when searching "string" in message)

This commit is contained in:
Sebastien Helleu
2010-10-25 14:20:28 +02:00
parent 4e6c4ceb5f
commit ff79164350
3 changed files with 53 additions and 43 deletions
+48 -39
View File
@@ -71,8 +71,8 @@ struct t_irc_redirect_pattern irc_redirect_patterns_default[] =
* extra: 329: channel creation date
*/
NULL,
"324:3,403:3,442:3,479:3",
"329:3",
"324:1,403:1,442:1,479:1",
"329:1",
NULL, NULL,
},
{ "mode_channel_ban", 0, 0, /* mode #channel b */
@@ -84,8 +84,8 @@ struct t_irc_redirect_pattern irc_redirect_patterns_default[] =
* 479: cannot join channel (illegal name)
* extra: -
*/
"367:3",
"368:3,403:3,442:3,479:3",
"367:1",
"368:1,403:1,442:1,479:1",
NULL,
NULL, NULL,
},
@@ -100,8 +100,8 @@ struct t_irc_redirect_pattern irc_redirect_patterns_default[] =
* 482: you're not channel operator
* extra: -
*/
"348:3",
"349:3,403:3,442:3,472,479:3,482:3",
"348:1",
"349:1,403:1,442:1,472,479:1,482:1",
NULL,
NULL, NULL,
},
@@ -116,8 +116,8 @@ struct t_irc_redirect_pattern irc_redirect_patterns_default[] =
* 482: you're not channel operator
* extra: -
*/
"346:3",
"347:3,403:3,442:3,472,479:3,482:3",
"346:1",
"347:1,403:1,442:1,472,479:1,482:1",
NULL,
NULL, NULL,
},
@@ -132,7 +132,7 @@ struct t_irc_redirect_pattern irc_redirect_patterns_default[] =
* extra; -
*/
NULL,
"mode:2,221:3,403:3,501,502",
"mode:0,221:0,403:1,501,502",
NULL,
NULL, NULL,
},
@@ -142,8 +142,8 @@ struct t_irc_redirect_pattern irc_redirect_patterns_default[] =
* stop: 366: end of /names list
* extra; -
*/
"353:4",
"366:3",
"353:2",
"366:1",
NULL,
NULL, NULL,
},
@@ -179,8 +179,8 @@ struct t_irc_redirect_pattern irc_redirect_patterns_default[] =
* extra: 333: infos about topic (nick and date changed)
*/
NULL,
"331:3,332:3,403:3",
"333:3",
"331:1,332:1,403:1",
"333:1",
NULL, NULL,
},
{ "userhost", 0, 0,
@@ -190,7 +190,7 @@ struct t_irc_redirect_pattern irc_redirect_patterns_default[] =
* 461: not enough parameters
* extra: -
*/
"401:3",
"401:1",
"302,461",
NULL,
NULL, NULL,
@@ -204,8 +204,8 @@ struct t_irc_redirect_pattern irc_redirect_patterns_default[] =
* 403: no such channel
* extra: -
*/
"352:3,354,401:3",
"315:3,403:3",
"352:1,354,401:1",
"315:1,403:1",
NULL,
NULL, NULL,
},
@@ -219,9 +219,9 @@ struct t_irc_redirect_pattern irc_redirect_patterns_default[] =
* 461: not enough parameters
* extra: 318: whois (end)
*/
"311:3",
"318:3,401:3,402:3,431:3,461",
"318:3",
"311:1",
"318:1,401:1,402:1,431:1,461",
"318:1",
NULL, NULL,
},
{ "whowas", 0, 0,
@@ -231,8 +231,8 @@ struct t_irc_redirect_pattern irc_redirect_patterns_default[] =
* stop: 369: end of whowas
* extra: -
*/
"314:3,406:3",
"369:3",
"314:1,406:1",
"369:1",
NULL,
NULL, NULL,
},
@@ -614,8 +614,8 @@ irc_redirect_init_command (struct t_irc_redirect *redirect,
int
irc_redirect_message_match_hash (struct t_irc_redirect *redirect,
char **message_argv, int message_argc,
const char *command,
char **arguments_argv, int arguments_argc,
struct t_hashtable *cmd_hash)
{
int *value;
@@ -630,10 +630,10 @@ irc_redirect_message_match_hash (struct t_irc_redirect *redirect,
*/
if (redirect->string && redirect->string[0] && (*value >= 0))
{
if (*value >= message_argc)
if (!arguments_argv || (*value >= arguments_argc))
return 0;
if (strcmp (message_argv[*value], redirect->string) != 0)
if (strcmp (arguments_argv[*value], redirect->string) != 0)
return 0;
}
@@ -747,18 +747,27 @@ irc_redirect_stop (struct t_irc_redirect *redirect, const char *error)
int
irc_redirect_message (struct t_irc_server *server, const char *message,
const char *command)
const char *command, const char *arguments)
{
struct t_irc_redirect *ptr_redirect, *ptr_next_redirect;
int rc, match_stop, message_argc;
char **message_argv;
int rc, match_stop, arguments_argc;
char **arguments_argv;
if (!server || !server->redirects || !message || !command)
return 0;
rc = 0;
message_argv = weechat_string_split (message, " ", 0, 0, &message_argc);
if (arguments && arguments[0])
{
arguments_argv = weechat_string_split (arguments, " ", 0, 0,
&arguments_argc);
}
else
{
arguments_argv = NULL;
arguments_argc = 0;
}
ptr_redirect = server->redirects;
while (ptr_redirect)
@@ -771,9 +780,9 @@ irc_redirect_message (struct t_irc_server *server, const char *message,
{
if (ptr_redirect->cmd_extra
&& irc_redirect_message_match_hash (ptr_redirect,
message_argv,
message_argc,
command,
arguments_argv,
arguments_argc,
ptr_redirect->cmd_extra))
{
irc_redirect_message_add (ptr_redirect, message, command);
@@ -789,9 +798,9 @@ irc_redirect_message (struct t_irc_server *server, const char *message,
if (ptr_redirect->cmd_start
&& !ptr_redirect->cmd_start_received
&& irc_redirect_message_match_hash (ptr_redirect,
message_argv,
message_argc,
command,
arguments_argv,
arguments_argc,
ptr_redirect->cmd_start))
{
/*
@@ -810,9 +819,9 @@ irc_redirect_message (struct t_irc_server *server, const char *message,
* if matching stop command
*/
match_stop = irc_redirect_message_match_hash (ptr_redirect,
message_argv,
message_argc,
command,
arguments_argv,
arguments_argc,
ptr_redirect->cmd_stop);
if (match_stop || ptr_redirect->cmd_start_received)
{
@@ -827,9 +836,9 @@ irc_redirect_message (struct t_irc_server *server, const char *message,
if (ptr_redirect->cmd_extra)
{
if (irc_redirect_message_match_hash (ptr_redirect,
message_argv,
message_argc,
command,
arguments_argv,
arguments_argc,
ptr_redirect->cmd_extra))
{
/*
@@ -858,8 +867,8 @@ irc_redirect_message (struct t_irc_server *server, const char *message,
}
end:
if (message_argv)
weechat_string_free_split (message_argv);
if (arguments_argv)
weechat_string_free_split (arguments_argv);
return rc;
}
+2 -1
View File
@@ -97,7 +97,8 @@ extern void irc_redirect_init_command (struct t_irc_redirect *redirect,
extern void irc_redirect_stop (struct t_irc_redirect *redirect,
const char *error);
extern int irc_redirect_message (struct t_irc_server *server,
const char *message, const char *command);
const char *message, const char *command,
const char *arguments);
extern void irc_redirect_free (struct t_irc_redirect *redirect);
extern void irc_redirect_free_all (struct t_irc_server *server);
extern int irc_redirect_pattern_add_to_infolist (struct t_infolist *infolist,
+3 -3
View File
@@ -1857,7 +1857,7 @@ irc_server_msgq_flush ()
{
struct t_irc_message *next;
char *ptr_data, *new_msg, *ptr_msg, *pos;
char *nick, *host, *command, *channel;
char *nick, *host, *command, *channel, *arguments;
char *msg_decoded, *msg_decoded_without_color;
char str_modifier[64], modifier_data[256];
@@ -1915,7 +1915,7 @@ irc_server_msgq_flush ()
irc_server_parse_message (ptr_msg, &nick, &host,
&command, &channel,
NULL);
&arguments);
/* convert charset for message */
if (channel)
@@ -1957,7 +1957,7 @@ irc_server_msgq_flush ()
if (irc_redirect_message (irc_recv_msgq->server,
(msg_decoded_without_color) ?
msg_decoded_without_color : ((msg_decoded) ? msg_decoded : ptr_msg),
command))
command, arguments))
{
/* message redirected, we'll not display it! */
}