- 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.
39 lines
1.2 KiB
C
39 lines
1.2 KiB
C
#ifndef CMD_AI_H
|
|
#define CMD_AI_H
|
|
|
|
#include "zynk.h"
|
|
|
|
/*
|
|
* cmd_ai - Handle the "!ai <question>" command.
|
|
*
|
|
* Passes the question to ai_ask() in plan mode (agent=NULL), which means
|
|
* the AI can only discuss and answer questions but cannot modify files.
|
|
* Extracts the question text after "!ai ", trims trailing whitespace.
|
|
*
|
|
* Parameters:
|
|
* s - The IRC session.
|
|
* msg - The raw message text.
|
|
* reply_target - Channel or nick to reply to.
|
|
* src_nick - The nick of the user who sent the command.
|
|
*
|
|
* Returns: 1 if matched, 0 otherwise.
|
|
*/
|
|
int cmd_ai(Session *s, const char *msg, const char *reply_target, const char *src_nick) {
|
|
if (strncmp(msg, "!ai", 3) != 0) return 0;
|
|
if (msg[3] != ' ' && msg[3] != '\0') return 0;
|
|
const char *rest = msg[3] == ' ' ? msg + 4 : "";
|
|
while (*rest == ' ') rest++;
|
|
if (!*rest) {
|
|
irc_reply(s, reply_target, src_nick, "Usage: !ai <question>");
|
|
return 1;
|
|
}
|
|
char question[2048];
|
|
snprintf(question, sizeof question, "%s", rest);
|
|
char *end = question + strlen(question);
|
|
while (end > question && end[-1] == ' ') end--;
|
|
*end = 0;
|
|
ai_ask(s, question, reply_target, src_nick, NULL);
|
|
return 1;
|
|
}
|
|
|
|
#endif
|