degesch: fix handling of status messages
That is, messages using the STATUSMSG feature.
This commit is contained in:
parent
f20c6fb28e
commit
5ca07656a1
16
degesch.c
16
degesch.c
@ -2340,6 +2340,13 @@ irc_is_channel (struct server *s, const char *ident)
|
||||
!!strchr (s->irc_idchan_prefixes, *ident));
|
||||
}
|
||||
|
||||
// Message targets can be prefixed by a character filtering their targets
|
||||
static const char *
|
||||
irc_skip_statusmsg (struct server *s, const char *target)
|
||||
{
|
||||
return target + (*target && strchr (s->irc_statusmsg, *target));
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
// As of 2015, everything should be in UTF-8. And if it's not, we'll decode it
|
||||
@ -4850,6 +4857,9 @@ static struct buffer *
|
||||
irc_get_buffer_for_message (struct server *s,
|
||||
const struct irc_message *msg, const char *target)
|
||||
{
|
||||
// TODO: display such messages differently
|
||||
target = irc_skip_statusmsg (s, target);
|
||||
|
||||
struct buffer *buffer = str_map_find (&s->irc_buffer_map, target);
|
||||
if (irc_is_channel (s, target))
|
||||
{
|
||||
@ -4918,6 +4928,8 @@ irc_get_privmsg_prefix (struct server *s, struct user *user, const char *target)
|
||||
{
|
||||
struct str prefix;
|
||||
str_init (&prefix);
|
||||
|
||||
target = irc_skip_statusmsg (s, target);
|
||||
if (user && irc_is_channel (s, target))
|
||||
{
|
||||
struct channel *channel;
|
||||
@ -5615,7 +5627,7 @@ irc_handle_ctcp_request (struct server *s,
|
||||
struct formatter f;
|
||||
formatter_init (&f, s->ctx, s);
|
||||
formatter_add (&f, "CTCP requested by #n", msg->prefix);
|
||||
if (irc_is_channel (s, target))
|
||||
if (irc_is_channel (s, irc_skip_statusmsg (s, target)))
|
||||
formatter_add (&f, " (to #S)", target);
|
||||
formatter_add (&f, ": #S", chunk->tag.str);
|
||||
log_formatter (s->ctx, s->buffer, BUFFER_LINE_STATUS, &f);
|
||||
@ -7526,7 +7538,7 @@ handle_command_query (struct handler_args *a)
|
||||
return false;
|
||||
|
||||
char *target = cut_word (&a->arguments);
|
||||
if (irc_is_channel (a->s, target))
|
||||
if (irc_is_channel (a->s, irc_skip_statusmsg (a->s, target)))
|
||||
log_server_error (a->s, a->s->buffer, "Cannot query a channel");
|
||||
else if (!*a->arguments)
|
||||
log_server_error (a->s, a->s->buffer, "No text to send");
|
||||
|
Loading…
Reference in New Issue
Block a user