rendered paste body/* *//* To Build this file: Save it as nickspam.c and use the next line to compile it *//* gcc -Wl,--export-dynamic -Wall -O2 -shared -fPIC -o nickspam.so nickspam.c *//* *//* In Xchat, select Xchat->load plugin or script and then select nickspam.so to load it *//* tested, seems to work with no problems, came from khisanth in #xchat, since its straight C*//* code it runs fast. /* You can distribute this header with your plugins for easy compilation */#ifndef XCHAT_PLUGIN_H#define XCHAT_PLUGIN_H#include <time.h>#define XCHAT_IFACE_MAJOR 1#define XCHAT_IFACE_MINOR 9#define XCHAT_IFACE_MICRO 11#define XCHAT_IFACE_VERSION ((XCHAT_IFACE_MAJOR * 10000) + \ (XCHAT_IFACE_MINOR * 100) + \ (XCHAT_IFACE_MICRO))#define XCHAT_PRI_HIGHEST 127#define XCHAT_PRI_HIGH 64#define XCHAT_PRI_NORM 0#define XCHAT_PRI_LOW (-64)#define XCHAT_PRI_LOWEST (-128)#define XCHAT_FD_READ 1#define XCHAT_FD_WRITE 2#define XCHAT_FD_EXCEPTION 4#define XCHAT_FD_NOTSOCKET 8#define XCHAT_EAT_NONE 0 /* pass it on through! */#define XCHAT_EAT_XCHAT 1 /* don't let xchat see this event */#define XCHAT_EAT_PLUGIN 2 /* don't let other plugins see this event */#define XCHAT_EAT_ALL (XCHAT_EAT_XCHAT|XCHAT_EAT_PLUGIN) /* don't let anything see this event */#ifdef __cplusplusextern "C" {#endiftypedef struct _xchat_plugin xchat_plugin;typedef struct _xchat_list xchat_list;typedef struct _xchat_hook xchat_hook;#ifndef PLUGIN_Ctypedef struct _xchat_context xchat_context;#endif#ifndef PLUGIN_Cstruct _xchat_plugin{ /* these are only used on win32 */ xchat_hook *(*xchat_hook_command) (xchat_plugin *ph, const char *name, int pri, int (*callback) (char *word[], char *word_eol[], void *user_data), const char *help_text, void *userdata); xchat_hook *(*xchat_hook_server) (xchat_plugin *ph, const char *name, int pri, int (*callback) (char *word[], char *word_eol[], void *user_data), void *userdata); xchat_hook *(*xchat_hook_print) (xchat_plugin *ph, const char *name, int pri, int (*callback) (char *word[], void *user_data), void *userdata); xchat_hook *(*xchat_hook_timer) (xchat_plugin *ph, int timeout, int (*callback) (void *user_data), void *userdata); xchat_hook *(*xchat_hook_fd) (xchat_plugin *ph, int fd, int flags, int (*callback) (int fd, int flags, void *user_data), void *userdata); void *(*xchat_unhook) (xchat_plugin *ph, xchat_hook *hook); void (*xchat_print) (xchat_plugin *ph, const char *text); void (*xchat_printf) (xchat_plugin *ph, const char *format, ...); void (*xchat_command) (xchat_plugin *ph, const char *command); void (*xchat_commandf) (xchat_plugin *ph, const char *format, ...); int (*xchat_nickcmp) (xchat_plugin *ph, const char *s1, const char *s2); int (*xchat_set_context) (xchat_plugin *ph, xchat_context *ctx); xchat_context *(*xchat_find_context) (xchat_plugin *ph, const char *servname, const char *channel); xchat_context *(*xchat_get_context) (xchat_plugin *ph); const char *(*xchat_get_info) (xchat_plugin *ph, const char *id); int (*xchat_get_prefs) (xchat_plugin *ph, const char *name, const char **string, int *integer); xchat_list * (*xchat_list_get) (xchat_plugin *ph, const char *name); void (*xchat_list_free) (xchat_plugin *ph, xchat_list *xlist); const char * const * (*xchat_list_fields) (xchat_plugin *ph, const char *name); int (*xchat_list_next) (xchat_plugin *ph, xchat_list *xlist); const char * (*xchat_list_str) (xchat_plugin *ph, xchat_list *xlist, const char *name); int (*xchat_list_int) (xchat_plugin *ph, xchat_list *xlist, const char *name); void * (*xchat_plugingui_add) (xchat_plugin *ph, const char *filename, const char *name, const char *desc, const char *version, char *reserved); void (*xchat_plugingui_remove) (xchat_plugin *ph, void *handle); int (*xchat_emit_print) (xchat_plugin *ph, const char *event_name, ...); int (*xchat_read_fd) (xchat_plugin *ph, void *src, char *buf, int *len); time_t (*xchat_list_time) (xchat_plugin *ph, xchat_list *xlist, const char *name); char *(*xchat_gettext) (xchat_plugin *ph, const char *msgid); void (*xchat_send_modes) (xchat_plugin *ph, const char **targets, int ntargets, int modes_per_line, char sign, char mode); char *(*xchat_strip) (xchat_plugin *ph, const char *str, int len, int flags); void (*xchat_free) (xchat_plugin *ph, void *ptr);};#endifxchat_hook *xchat_hook_command (xchat_plugin *ph, const char *name, int pri, int (*callback) (char *word[], char *word_eol[], void *user_data), const char *help_text, void *userdata);xchat_hook *xchat_hook_server (xchat_plugin *ph, const char *name, int pri, int (*callback) (char *word[], char *word_eol[], void *user_data), void *userdata);xchat_hook *xchat_hook_print (xchat_plugin *ph, const char *name, int pri, int (*callback) (char *word[], void *user_data), void *userdata);xchat_hook *xchat_hook_timer (xchat_plugin *ph, int timeout, int (*callback) (void *user_data), void *userdata);xchat_hook *xchat_hook_fd (xchat_plugin *ph, int fd, int flags, int (*callback) (int fd, int flags, void *user_data), void *userdata);void *xchat_unhook (xchat_plugin *ph, xchat_hook *hook);voidxchat_print (xchat_plugin *ph, const char *text);voidxchat_printf (xchat_plugin *ph, const char *format, ...);voidxchat_command (xchat_plugin *ph, const char *command);voidxchat_commandf (xchat_plugin *ph, const char *format, ...);intxchat_nickcmp (xchat_plugin *ph, const char *s1, const char *s2);intxchat_set_context (xchat_plugin *ph, xchat_context *ctx);xchat_context *xchat_find_context (xchat_plugin *ph, const char *servname, const char *channel);xchat_context *xchat_get_context (xchat_plugin *ph);const char *xchat_get_info (xchat_plugin *ph, const char *id);intxchat_get_prefs (xchat_plugin *ph, const char *name, const char **string, int *integer);xchat_list *xchat_list_get (xchat_plugin *ph, const char *name);voidxchat_list_free (xchat_plugin *ph, xchat_list *xlist);const char * const *xchat_list_fields (xchat_plugin *ph, const char *name);intxchat_list_next (xchat_plugin *ph, xchat_list *xlist);const char *xchat_list_str (xchat_plugin *ph, xchat_list *xlist, const char *name);intxchat_list_int (xchat_plugin *ph, xchat_list *xlist, const char *name);time_txchat_list_time (xchat_plugin *ph, xchat_list *xlist, const char *name);void *xchat_plugingui_add (xchat_plugin *ph, const char *filename, const char *name, const char *desc, const char *version, char *reserved);voidxchat_plugingui_remove (xchat_plugin *ph, void *handle);intxchat_emit_print (xchat_plugin *ph, const char *event_name, ...);char *xchat_gettext (xchat_plugin *ph, const char *msgid);voidxchat_send_modes (xchat_plugin *ph, const char **targets, int ntargets, int modes_per_line, char sign, char mode);char *xchat_strip (xchat_plugin *ph, const char *str, int len, int flags);voidxchat_free (xchat_plugin *ph, void *ptr);#if !defined(PLUGIN_C) && defined(WIN32)#ifndef XCHAT_PLUGIN_HANDLE#define XCHAT_PLUGIN_HANDLE (ph)#endif#define xchat_hook_command ((XCHAT_PLUGIN_HANDLE)->xchat_hook_command)#define xchat_hook_server ((XCHAT_PLUGIN_HANDLE)->xchat_hook_server)#define xchat_hook_print ((XCHAT_PLUGIN_HANDLE)->xchat_hook_print)#define xchat_hook_timer ((XCHAT_PLUGIN_HANDLE)->xchat_hook_timer)#define xchat_hook_fd ((XCHAT_PLUGIN_HANDLE)->xchat_hook_fd)#define xchat_unhook ((XCHAT_PLUGIN_HANDLE)->xchat_unhook)#define xchat_print ((XCHAT_PLUGIN_HANDLE)->xchat_print)#define xchat_printf ((XCHAT_PLUGIN_HANDLE)->xchat_printf)#define xchat_command ((XCHAT_PLUGIN_HANDLE)->xchat_command)#define xchat_commandf ((XCHAT_PLUGIN_HANDLE)->xchat_commandf)#define xchat_nickcmp ((XCHAT_PLUGIN_HANDLE)->xchat_nickcmp)#define xchat_set_context ((XCHAT_PLUGIN_HANDLE)->xchat_set_context)#define xchat_find_context ((XCHAT_PLUGIN_HANDLE)->xchat_find_context)#define xchat_get_context ((XCHAT_PLUGIN_HANDLE)->xchat_get_context)#define xchat_get_info ((XCHAT_PLUGIN_HANDLE)->xchat_get_info)#define xchat_get_prefs ((XCHAT_PLUGIN_HANDLE)->xchat_get_prefs)#define xchat_list_get ((XCHAT_PLUGIN_HANDLE)->xchat_list_get)#define xchat_list_free ((XCHAT_PLUGIN_HANDLE)->xchat_list_free)#define xchat_list_fields ((XCHAT_PLUGIN_HANDLE)->xchat_list_fields)#define xchat_list_str ((XCHAT_PLUGIN_HANDLE)->xchat_list_str)#define xchat_list_int ((XCHAT_PLUGIN_HANDLE)->xchat_list_int)#define xchat_list_time ((XCHAT_PLUGIN_HANDLE)->xchat_list_time)#define xchat_list_next ((XCHAT_PLUGIN_HANDLE)->xchat_list_next)#define xchat_plugingui_add ((XCHAT_PLUGIN_HANDLE)->xchat_plugingui_add)#define xchat_plugingui_remove ((XCHAT_PLUGIN_HANDLE)->xchat_plugingui_remove)#define xchat_emit_print ((XCHAT_PLUGIN_HANDLE)->xchat_emit_print)#define xchat_gettext ((XCHAT_PLUGIN_HANDLE)->xchat_gettext)#define xchat_send_modes ((XCHAT_PLUGIN_HANDLE)->xchat_send_modes)#define xchat_strip ((XCHAT_PLUGIN_HANDLE)->xchat_strip)#define xchat_free ((XCHAT_PLUGIN_HANDLE)->xchat_free)#endif#ifdef __cplusplus}#endif#endif/* nickspam.c - Written by Tblue, (c) 2010 *//* gcc -Wl,--export-dynamic -Wall -O2 -shared -fPIC -o nickspam.so nickspam.c */#include <string.h> /* #include "xchat-plugin.h" commented out as pulled header file inside here */static xchat_plugin *ph;static int privmsg_cb( char *word[], char *word_eol[], void *userdata );int xchat_plugin_init( xchat_plugin *plugin_handle, char **plugin_name, char **plugin_desc, char **plugin_ver, char *arg ){ ph = plugin_handle; *plugin_name = "Anti nick spam"; *plugin_desc = "Ignores bots flooding a channel with nick spam."; *plugin_ver = "0.1"; xchat_hook_server( ph, "PRIVMSG", XCHAT_PRI_NORM, privmsg_cb, NULL ); return 1;}static int privmsg_cb( char *word[], char *word_eol[], void *userdata ){ char *nickstart = word[1] + 1; char *nickend = strchr( nickstart, '!' ); char *firstword = word[4] + 1; if( nickend && strncmp( firstword, nickstart, nickend - nickstart ) == 0 && strlen( word_eol[4] ) > 200 ) { xchat_emit_print( ph, "Generic Message", "*", "Nickspam detected!" ); xchat_commandf( ph, "IGNORE %s CHAN", nickstart ); return XCHAT_EAT_ALL; } return XCHAT_EAT_NONE;}