/* ==================== IRC_Callback_Default Libircclient event handler for non-numeric events. ==================== */ static void IRC_Callback_Default(void *session, const char *event, const char *origin, const char **params, unsigned int count) { unsigned int i; irc_session_t *s = (irc_session_t*)irc_get_ctx(session); char nick[MAX_INPUTLINE]; if(irc_eventlog.integer) { IRC_Printf("^1%i^7 [^3%s^7] origin: %s, params: \n", s->handle, event, origin); for(i = 0; i < count; ++i) IRC_Printf(" %i: ^2%s\n", i, params[i]); } if(!strcmp(event, "CONNECT")) { // In case the server doesn't like our nickname strlcpy(s->nick, params[0], sizeof(s->nick)); } else if(!strcmp(event, "NICK")) { irc_target_get_nick(origin, nick, sizeof(nick)); if(!strcmp(s->nick, nick)) // our nickname changed strlcpy(s->nick, params[0], sizeof(s->nick)); } else if(!strcmp(event, "CTCP") && !strncmp(params[0], "VERSION", 7)) { char ctcpreply[sizeof(engineversion) + 8]; irc_target_get_nick(origin, nick, sizeof(nick)); strlcpy(ctcpreply, "VERSION ", sizeof(ctcpreply)); strlcat(ctcpreply, engineversion, sizeof(ctcpreply)); irc_cmd_ctcp_reply(s->session, nick, ctcpreply); } IRC_Callback_QuakeC(SVVM_prog, s->handle, event, -1, origin, params, count); }
static void libirc_event_ctcp_internal (irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count) { if ( origin ) { char nickbuf[128], textbuf[256]; irc_target_get_nick (origin, nickbuf, sizeof(nickbuf)); if(is_lua_active(session)) if(lua_process_event(session,event,origin,params,count)) return; if ( strstr (params[0], "PING") == params[0] ){ _snprintf(textbuf,sizeof(textbuf),"PONG%s",params[0]+4); irc_cmd_ctcp_reply (session, nickbuf, textbuf); printf("--->pong reply %s\n",textbuf); } else if ( !strcmp (params[0], "VERSION") ) { unsigned int high, low; irc_get_version (&high, &low); sprintf (textbuf, "VERSION slimIRC client - using libirc by Georgy Yunaev ver.%d.%d", high, low); irc_cmd_ctcp_reply (session, nickbuf, textbuf); } else if ( !strcmp (params[0], "FINGER") ) { sprintf (textbuf, "FINGER %s (%s) Idle 0 seconds", session->username ? session->username : "******", session->realname ? session->realname : "noname"); irc_cmd_ctcp_reply (session, nickbuf, textbuf); } else if ( !strcmp (params[0], "TIME") ) { time_t now = time(0); #if defined (ENABLE_THREADS) && defined (HAVE_LOCALTIME_R) struct tm tmtmp, *ltime = localtime_r (&now, &tmtmp); #else struct tm * ltime = localtime (&now); #endif strftime (textbuf, sizeof(textbuf), "%a %b %d %H:%M:%S %Z %Y", ltime); irc_cmd_ctcp_reply (session, nickbuf, textbuf); } } }
void event_ctcp_request(irc_session_t *session,const char* WXUNUSED(event),const char *origin, const char **params,unsigned int WXUNUSED(count)) { char nick[128]; irc_target_get_nick(origin,nick,sizeof(nick)); if (!strcasecmp(params[0],"VERSION")) { wxString s; s<<wxT("VERSION ")<<CSL_NAME_STR<<wxT(" ")<<CSL_VERSION_LONG_STR<<CSL_WEBADDRFULL_STR; irc_cmd_ctcp_reply(session,nick,U2A(s)); } }
static int lua_irc_cmd_ctcp_reply(lua_State *L) { void *session; const char *nick,*reply; int result=LIBIRC_ERR_INVAL; if(lua_gettop(L)==3){ //(void *session,char *nick,char *reply) session=lua_touserdata(L,1); nick=lua_tostring(L,2); reply=lua_tostring(L,3); if(session && nick && reply) result=irc_cmd_ctcp_reply(session,nick,reply); } lua_pushinteger(L,result); return 1; }
void dazeus::Server::ctcpReply( const std::string &destination, const std::string &message ) { ircEventMe("CTCP_REP_ME", destination, message); irc_cmd_ctcp_reply(IRC, destination.c_str(), message.c_str()); }