mirror of
https://github.com/irssi/irssi.git
synced 2024-09-08 04:26:01 -04:00
Fix #291, "/msg +#channel incorrectly shows up as Nick:@#channel"
Just passing the full target to the "message irc op_public" signal handler and letting it do the cleanup. The fe_channel_skip_prefix() call in event_privmsg() is kept because recode_in() needs a real channel name, but There was similar code in sig_message_own_wall(), but that one is correct - the /wall command always sends NOTICE @#chan, so I added a comment down there to make it clear.
This commit is contained in:
parent
85223a9b6b
commit
bf36f71b99
@ -56,11 +56,13 @@ static void event_privmsg(IRC_SERVER_REC *server, const char *data,
|
|||||||
|
|
||||||
if (fe_channel_is_opchannel(server, target)) {
|
if (fe_channel_is_opchannel(server, target)) {
|
||||||
/* Hybrid 6 feature, send msg to all ops in channel */
|
/* Hybrid 6 feature, send msg to all ops in channel */
|
||||||
target = (char *)fe_channel_skip_prefix(server, target);
|
const char *cleantarget = fe_channel_skip_prefix(server, target);
|
||||||
recoded = recode_in(SERVER(server), msg, target);
|
recoded = recode_in(SERVER(server), msg, cleantarget);
|
||||||
|
|
||||||
|
/* pass the original target to the signal, with the @+ here
|
||||||
|
* the other one is only needed for recode_in*/
|
||||||
signal_emit("message irc op_public", 5,
|
signal_emit("message irc op_public", 5,
|
||||||
server, recoded, nick, addr,
|
server, recoded, nick, addr, target);
|
||||||
get_visible_target(server, target));
|
|
||||||
} else {
|
} else {
|
||||||
recoded = recode_in(SERVER(server), msg, server_ischannel(SERVER(server), target) ? target : nick);
|
recoded = recode_in(SERVER(server), msg, server_ischannel(SERVER(server), target) ? target : nick);
|
||||||
signal_emit(server_ischannel(SERVER(server), target) ?
|
signal_emit(server_ischannel(SERVER(server), target) ?
|
||||||
|
@ -37,6 +37,7 @@
|
|||||||
#include "fe-queries.h"
|
#include "fe-queries.h"
|
||||||
#include "window-items.h"
|
#include "window-items.h"
|
||||||
#include "fe-irc-channels.h"
|
#include "fe-irc-channels.h"
|
||||||
|
#include "fe-irc-server.h"
|
||||||
|
|
||||||
static void sig_message_own_public(SERVER_REC *server, const char *msg,
|
static void sig_message_own_public(SERVER_REC *server, const char *msg,
|
||||||
const char *target, const char *origtarget)
|
const char *target, const char *origtarget)
|
||||||
@ -70,18 +71,28 @@ static void sig_message_irc_op_public(SERVER_REC *server, const char *msg,
|
|||||||
const char *nick, const char *address,
|
const char *nick, const char *address,
|
||||||
const char *target)
|
const char *target)
|
||||||
{
|
{
|
||||||
char *nickmode, *optarget;
|
char *nickmode, *optarget, *prefix;
|
||||||
|
const char *cleantarget;
|
||||||
|
|
||||||
|
/* only skip here so the difference can be stored in prefix */
|
||||||
|
cleantarget = fe_channel_skip_prefix(IRC_SERVER(server), target);
|
||||||
|
prefix = g_strndup(target, cleantarget - target);
|
||||||
|
|
||||||
|
/* and clean the rest here */
|
||||||
|
cleantarget = get_visible_target(IRC_SERVER(server), cleantarget);
|
||||||
|
|
||||||
nickmode = channel_get_nickmode(channel_find(server, target),
|
nickmode = channel_get_nickmode(channel_find(server, target),
|
||||||
nick);
|
nick);
|
||||||
|
|
||||||
optarget = g_strconcat("@", target, NULL);
|
optarget = g_strconcat(prefix, cleantarget, NULL);
|
||||||
printformat_module("fe-common/core", server, target,
|
|
||||||
|
printformat_module("fe-common/core", server, cleantarget,
|
||||||
MSGLEVEL_PUBLIC,
|
MSGLEVEL_PUBLIC,
|
||||||
TXT_PUBMSG_CHANNEL,
|
TXT_PUBMSG_CHANNEL,
|
||||||
nick, optarget, msg, nickmode);
|
nick, optarget, msg, nickmode);
|
||||||
g_free(nickmode);
|
g_free(nickmode);
|
||||||
g_free(optarget);
|
g_free(optarget);
|
||||||
|
g_free(prefix);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sig_message_own_wall(SERVER_REC *server, const char *msg,
|
static void sig_message_own_wall(SERVER_REC *server, const char *msg,
|
||||||
@ -92,6 +103,7 @@ static void sig_message_own_wall(SERVER_REC *server, const char *msg,
|
|||||||
nickmode = channel_get_nickmode(channel_find(server, target),
|
nickmode = channel_get_nickmode(channel_find(server, target),
|
||||||
server->nick);
|
server->nick);
|
||||||
|
|
||||||
|
/* this is always @, skip_prefix is not needed here */
|
||||||
optarget = g_strconcat("@", target, NULL);
|
optarget = g_strconcat("@", target, NULL);
|
||||||
printformat_module("fe-common/core", server, target,
|
printformat_module("fe-common/core", server, target,
|
||||||
MSGLEVEL_PUBLIC | MSGLEVEL_NOHILIGHT |
|
MSGLEVEL_PUBLIC | MSGLEVEL_NOHILIGHT |
|
||||||
|
Loading…
Reference in New Issue
Block a user