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));
|
!!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
|
// 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,
|
irc_get_buffer_for_message (struct server *s,
|
||||||
const struct irc_message *msg, const char *target)
|
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);
|
struct buffer *buffer = str_map_find (&s->irc_buffer_map, target);
|
||||||
if (irc_is_channel (s, 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;
|
struct str prefix;
|
||||||
str_init (&prefix);
|
str_init (&prefix);
|
||||||
|
|
||||||
|
target = irc_skip_statusmsg (s, target);
|
||||||
if (user && irc_is_channel (s, target))
|
if (user && irc_is_channel (s, target))
|
||||||
{
|
{
|
||||||
struct channel *channel;
|
struct channel *channel;
|
||||||
|
@ -5615,7 +5627,7 @@ irc_handle_ctcp_request (struct server *s,
|
||||||
struct formatter f;
|
struct formatter f;
|
||||||
formatter_init (&f, s->ctx, s);
|
formatter_init (&f, s->ctx, s);
|
||||||
formatter_add (&f, "CTCP requested by #n", msg->prefix);
|
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, " (to #S)", target);
|
||||||
formatter_add (&f, ": #S", chunk->tag.str);
|
formatter_add (&f, ": #S", chunk->tag.str);
|
||||||
log_formatter (s->ctx, s->buffer, BUFFER_LINE_STATUS, &f);
|
log_formatter (s->ctx, s->buffer, BUFFER_LINE_STATUS, &f);
|
||||||
|
@ -7526,7 +7538,7 @@ handle_command_query (struct handler_args *a)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
char *target = cut_word (&a->arguments);
|
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");
|
log_server_error (a->s, a->s->buffer, "Cannot query a channel");
|
||||||
else if (!*a->arguments)
|
else if (!*a->arguments)
|
||||||
log_server_error (a->s, a->s->buffer, "No text to send");
|
log_server_error (a->s, a->s->buffer, "No text to send");
|
||||||
|
|
Loading…
Reference in New Issue