- Added irc_reply(): new IRC response helper that automatically prepends the sender's nick to channel messages (e.g. 'nick: pong!'), while leaving private-message responses unmodified. This makes it clear which user the bot is addressing in busy channels. - Converted all non-admin command handlers to use irc_reply() instead of raw irc_msg(): !ping, !zynk, !weather, !forecast, !stock, !calc, !time, !seen, !tell, !gitlog, !changelog, !ai, !uptime, !version, !help, greeting/chat responses, and the 'Not implemented...' fallback. - Converted AI async responses (ai_check_completion()) to use irc_reply(), so AI answers delivered after the original query also show the nick. - Converted AI error messages in ai_ask() (rate-limit busy, fork failure, start failure) to use irc_reply(). - Removed redundant manual nick prefixes from commands that already embedded the sender's nick in their response text: !ping, !calc, !time, !uptime, and greeting/chat responses. - Admin commands (!quit, !reload, !restart, !rebuild, !code) are intentionally excluded - these are privileged operations where the nick prefix adds no value. - The tell_deliver() function retains its own existing format.
61 lines
2.3 KiB
C
61 lines
2.3 KiB
C
#ifndef CMD_GREETING_OR_CHAT_H
|
|
#define CMD_GREETING_OR_CHAT_H
|
|
|
|
#include "zynk.h"
|
|
|
|
/*
|
|
* cmd_greeting_or_chat - Handle casual chat messages and direct address.
|
|
*
|
|
* Checks if the message starts with the bot's nick followed by ':', and
|
|
* if so strips that prefix to get the actual message. Matches known
|
|
* greeting/casual phrases (hi, hey, hello, bye, jojo, whatsup, waddup,
|
|
* German phrases) with hardcoded responses. If the message doesn't match
|
|
* any known phrase but was addressed to the bot by nick, forwards it to
|
|
* ai_ask() in plan mode for an AI-powered conversation response.
|
|
*
|
|
* Parameters:
|
|
* s - The IRC session.
|
|
* msg - The raw message text.
|
|
* reply_target - Channel or nick to reply to.
|
|
* src_nick - The nick of the sender.
|
|
*
|
|
* Returns: void.
|
|
*/
|
|
void cmd_greeting_or_chat(Session *s, const char *msg, const char *reply_target, const char *src_nick) {
|
|
int nicklen = strlen(s->nick);
|
|
const char *cmd = msg;
|
|
if (strncasecmp(msg, s->nick, nicklen) == 0 && msg[nicklen] == ':') {
|
|
cmd = msg + nicklen + 1;
|
|
while (*cmd == ' ') cmd++;
|
|
if (!*cmd) cmd = msg;
|
|
}
|
|
char resp[1024];
|
|
int matched = 0;
|
|
if (strcasecmp(cmd, "hi") == 0 || strcasecmp(cmd, "hey") == 0 || strcasecmp(cmd, "hello") == 0) {
|
|
snprintf(resp, sizeof resp, "Hi!"); matched = 1;
|
|
} else if (strcasecmp(cmd, "bye") == 0 || strcasecmp(cmd, "goodbye") == 0) {
|
|
snprintf(resp, sizeof resp, "Bye!"); matched = 1;
|
|
} else if (strcasecmp(cmd, "jojo") == 0) {
|
|
snprintf(resp, sizeof resp, "Jo!"); matched = 1;
|
|
} else if (strcasecmp(cmd, "whatsup") == 0) {
|
|
snprintf(resp, sizeof resp, "Not much!"); matched = 1;
|
|
} else if (strcasecmp(cmd, "waddup") == 0) {
|
|
snprintf(resp, sizeof resp, "Yo!"); matched = 1;
|
|
} else if (strcasecmp(cmd, "waddup yo") == 0) {
|
|
snprintf(resp, sizeof resp, "Yo!"); matched = 1;
|
|
} else if (strcasecmp(cmd, "deine muddi") == 0 || strcasecmp(cmd, "deine mutter") == 0) {
|
|
snprintf(resp, sizeof resp, "Ey, lass das!"); matched = 1;
|
|
} else if (strcasecmp(cmd, "penis") == 0) {
|
|
snprintf(resp, sizeof resp, "..."); matched = 1;
|
|
}
|
|
if (matched) {
|
|
irc_reply(s, reply_target, src_nick, resp);
|
|
log_stamp(); fprintf(stderr, CLR_CYAN "CHAT %s from %s:" CLR_RESET " %s\n", reply_target, src_nick, resp);
|
|
return;
|
|
}
|
|
if (cmd != msg) {
|
|
ai_ask(s, cmd, reply_target, src_nick, NULL);
|
|
}
|
|
}
|
|
|
|
#endif
|