diff options
-rw-r--r-- | degesch.c | 26 |
1 files changed, 22 insertions, 4 deletions
@@ -2722,10 +2722,28 @@ send_message_to_target (struct app_context *ctx, return; } - // TODO: autosplit - irc_send (ctx, "PRIVMSG %s :%s", target, message); - buffer_send (ctx, buffer, BUFFER_LINE_PRIVMSG, 0, - ctx->irc_user->nickname, NULL, "%s", message); + int one_message = 0; + if (ctx->irc_user_host) + // :<nick>!<user>@<host> PRIVMSG <target> :<message> + one_message = 510 - 1 - (int) strlen (ctx->irc_user->nickname) + - 1 - (int) strlen (ctx->irc_user_host) + - 1 - 7 - 1 - strlen (target) - 1 - 1; + + // FIXME: UTF-8 sequences + int left = strlen (message); + while (left) + { + int part = MIN (one_message, left); + if (!one_message) + part = left; + + irc_send (ctx, "PRIVMSG %s :%.*s", target, part, message); + buffer_send (ctx, buffer, BUFFER_LINE_PRIVMSG, 0, + ctx->irc_user->nickname, NULL, "%.*s", part, message); + + left -= part; + message += part; + } } static void |