summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcheapie <no-email-for-you@example.com>2015-08-26 02:28:37 -0400
committercheapie <no-email-for-you@example.com>2015-08-26 02:28:37 -0400
commit0df279ad8735176f7bb3ffbac1971cd5bdc6572a (patch)
treec253c11f120113c44907d598cf1d65c2fea1c7e7
parent63f28d8cb0bdb176e23d9296255cf86c4f3430c2 (diff)
downloadsparkles-0df279ad8735176f7bb3ffbac1971cd5bdc6572a.tar
sparkles-0df279ad8735176f7bb3ffbac1971cd5bdc6572a.tar.gz
sparkles-0df279ad8735176f7bb3ffbac1971cd5bdc6572a.tar.bz2
sparkles-0df279ad8735176f7bb3ffbac1971cd5bdc6572a.tar.xz
sparkles-0df279ad8735176f7bb3ffbac1971cd5bdc6572a.zip
One source file for XChat and HexChat
4hexchat.c was really ugly and I'm removing the need for it. Now there's a HEXCHAT define, and turning it on makes all the XChat API functions aliases to the HexChat API functions
-rw-r--r--4hexchat.c40
-rw-r--r--4hexchat.exebin53278 -> 0 bytes
-rw-r--r--4hexchat.h46
-rw-r--r--HexChat.def4
-rw-r--r--XChat.def4
-rw-r--r--hexsparkles.c3933
-rw-r--r--makeHexsparkles.bat3
-rw-r--r--makeHexsparkles64.bat3
-rw-r--r--sparkles.c34
9 files changed, 74 insertions, 3993 deletions
diff --git a/4hexchat.c b/4hexchat.c
deleted file mode 100644
index 956a4a7..0000000
--- a/4hexchat.c
+++ /dev/null
@@ -1,40 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-int main(int argc, char *argv[]) {
- if(argc < 3){puts("Syntax: 4Hexchat Input Output"); return -1;}
-
- FILE *File = fopen(argv[1],"rb");
- if(File == NULL) {
- fputs("Couldn't open file for reading",stderr); return 0;
- }
- fseek(File, 0, SEEK_END);
- long FileSize = ftell(File);
- rewind(File);
- char *Buffer = (char*)malloc(sizeof(char)*FileSize);
- if(Buffer == NULL) {
- fclose(File);
- fputs("Can't allocate memory",stderr); return 0;
- }
- if(FileSize != fread(Buffer,1,FileSize,File)) {
- fclose(File);
- fputs("Can't read from file",stderr); return 0;
- }
- fclose(File);
- File = fopen(argv[2],"wb");
- if(File == NULL) {
- fputs("Couldn't open file for writing",stderr); return 0;
- }
-
- int i;
- for(i=0;i<FileSize;i++) {
- if(!memcmp(&Buffer[i], "xchat_", 6) && Buffer[i-1] != 'e') fprintf(File, "he");
- if(!memcmp(&Buffer[i], "xchat-", 6) && Buffer[i-1] != 'e') fprintf(File, "he");
- if(!memcmp(&Buffer[i], "XCHAT_", 6) && Buffer[i-1] != 'E') fprintf(File, "HE");
- fputc(Buffer[i], File);
- }
- fclose(File);
- free(Buffer);
- return 1;
-}
diff --git a/4hexchat.exe b/4hexchat.exe
deleted file mode 100644
index 9bba467..0000000
--- a/4hexchat.exe
+++ /dev/null
Binary files differ
diff --git a/4hexchat.h b/4hexchat.h
new file mode 100644
index 0000000..99b692f
--- /dev/null
+++ b/4hexchat.h
@@ -0,0 +1,46 @@
+#define XCHAT_PRI_HIGHEST HEXCHAT_PRI_HIGHEST
+#define XCHAT_PRI_HIGH HEXCHAT_PRI_HIGH
+#define XCHAT_PRI_NORM HEXCHAT_PRI_NORM
+#define XCHAT_PRI_LOW HEXCHAT_PRI_LOW
+#define XCHAT_PRI_LOWEST HEXCHAT_PRI_LOWEST
+
+#define XCHAT_EAT_NONE HEXCHAT_EAT_NONE
+#define XCHAT_EAT_XCHAT HEXCHAT_EAT_XCHAT
+#define XCHAT_EAT_PLUGIN HEXCHAT_EAT_PLUGIN
+#define XCHAT_EAT_ALL HEXCHAT_EAT_ALL
+
+#define xchat_plugin hexchat_plugin
+#define xchat_list hexchat_list
+#define xchat_hook hexchat_hook
+#define xchat_context hexchat_context
+
+#define xchat_hook_command hexchat_hook_command
+#define xchat_hook_server hexchat_hook_server
+#define xchat_hook_print hexchat_hook_print
+#define xchat_hook_timer hexchat_hook_timer
+#define xchat_hook_fd hexchat_hook_fd
+#define xchat_unhook hexchat_unhook
+#define xchat_print hexchat_print
+#define xchat_printf hexchat_printf
+#define xchat_command hexchat_command
+#define xchat_commandf hexchat_commandf
+#define xchat_nickcmp hexchat_nickcmp
+#define xchat_set_context hexchat_set_context
+#define xchat_find_context hexchat_find_context
+#define xchat_get_context hexchat_get_context
+#define xchat_get_info hexchat_get_info
+#define xchat_get_prefs hexchat_get_prefs
+#define xchat_list_get hexchat_list_get
+#define xchat_list_free hexchat_list_free
+#define xchat_list_fields hexchat_list_fields
+#define xchat_list_str hexchat_list_str
+#define xchat_list_int hexchat_list_int
+#define xchat_list_time hexchat_list_time
+#define xchat_list_next hexchat_list_next
+#define xchat_plugingui_add hexchat_plugingui_add
+#define xchat_plugingui_remove hexchat_plugingui_remove
+#define xchat_emit_print hexchat_emit_print
+#define xchat_gettext hexchat_gettext
+#define xchat_send_modes hexchat_send_modes
+#define xchat_strip hexchat_strip
+#define xchat_free hexchat_free
diff --git a/HexChat.def b/HexChat.def
deleted file mode 100644
index 7573225..0000000
--- a/HexChat.def
+++ /dev/null
@@ -1,4 +0,0 @@
-EXPORTS
- hexchat_plugin_init
- hexchat_plugin_deinit
- hexchat_plugin_get_info \ No newline at end of file
diff --git a/XChat.def b/XChat.def
deleted file mode 100644
index 4209ad0..0000000
--- a/XChat.def
+++ /dev/null
@@ -1,4 +0,0 @@
-EXPORTS
- xchat_plugin_init
- xchat_plugin_deinit
- xchat_plugin_get_info \ No newline at end of file
diff --git a/hexsparkles.c b/hexsparkles.c
deleted file mode 100644
index a6d1b0a..0000000
--- a/hexsparkles.c
+++ /dev/null
@@ -1,3933 +0,0 @@
-/*
- * Sparkles for XChat
- *
- * Copyright (C) 2011-2015 Princess Nova Storm the Squirrel
- *
- * This program is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-// YiffScript originally by Dr Dos
-// Extra yiff actions taken from http://pastie.org/pastes/1069466
-
-#define PNAME "Nova's Sparkles"
-#define PDESC "Mix of annoying/powerful/useful stuff"
-#define PVERSION "1.1.1"
-#define USE_SPARKLES_USER 0
-#define ENABLE_NSFW_CONTENT 1
-#define PESTERCHUM_NETWORK "Pesterchum"
-
-#include "hexchat-plugin.h"
-#include <stdio.h> // sprintf() and file access
-#include <string.h> // compares and copies and stuff
-#include <stdarg.h> // Adj() really needs this
-#include <stdlib.h> // for strtol() and rand() mainly
-#include <time.h> // so I can seed the randomizer with the current time
-#include <ctype.h> // used in the capitalization functions
-#include <dirent.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#ifdef _WIN32
-#include <windows.h>
-#endif
-static hexchat_plugin *ph; /* plugin handle */
-static char TextEditor[512]="start notepad";
-static int RejoinKick = 0;
-static int EatInvites = 0;
-static int JoinOnInvite= 0;
-static int BeVerbose = 0;
-static int LastYiff = -1;
-static int DisableAutoIdent = 0;
-static int DisableAutoNickDeblue= 0;
-static int DisableAutoGhost=0;
-static int DisableAutoGhostChainBreak=0;
-static int DisablePesterchum=0;
-static int DisablePrettyJanus=0;
-static int DisableSparklesCTCP = 0;
-static int ForceUTF8 = 0;
-static int AutoReclaimNick = 0;
-static char GhostReclaimNick[80]="";
-static int DisablePlusJFix = 0;
-static int Activity2Focus = 0;
-static char SayHookCommand[512]="";
-static int SayHookSpace = 1;
-static char OneSayHook[512]="";
-static char MeHookCommand[512]="";
-static int UseOneSayHook = 0;
-static hexchat_hook *SayHook, *MeHook;
-static int EatHighlights = 0;
-//static int MoveNotifyToServer=0;
-//static int MoveServicesToServer=0;
-static char ConfigFilePath[512]="";
-static char CustomYiffName[32] = "";
-static char *CustomYiffBuffer = NULL;
-static int CustomYiffCount = 0;
-static char *CustomYiffPointers[500];
-
-static unsigned int GhostDelayTime = 0; // to help stop "oh my god I started xchat and it autoghosted stuff"
-static int GrabbingTopic = 0;
-static char CommandPrefix[5] = "/"; // because this is able to be changed in XChat
-
-static char CmdStackText[512];
-static char *CmdStackPtr = NULL;
-
-static int ContextStackSP = 0;
-static hexchat_context *ContextStack[16];
-static int RandomType = 1;
-static int CharCounter = 0;
-static int PMAlerts = 0;
-static int PMAlertsEvenWithoutFocus = 0;
-static int PMAlertsEvenWithSameNetwork = 0;
-static int QuietOnEvents = 0;
-
-static int DisableShowNetworkOnJoin=0;
-static int NeedSpaceBetweenX5Font = 0;
-static char PesterchumChanHook[256] = "spark pestersay";
-static char PesterchumColor[64] = "0,0,0";
-
-static hexchat_hook *SpawnHook[64] = {NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL};
-static char JanusLinkbots[4][32] = {"IotaIRC","IotaIRC_","",""};
-
-// 02 16 1f 16 16 0f 02 03 30 30 03 30 30
-static const char SparkEncryptPrefix[] = {2,0x16,0x1f,0x16,0x16,0x0f,2,3,'0','0',3,'0','0',0};
-static char SparklesUser[64];
-
-static char *Rainbow[]={"04","08","09","12","13"};
-static char ClosedList[3][64] = {"","",""};
-
-static void INIConfigHandler(const char *Group, const char *Item, const char *Value);
-static int ParseINI(FILE *File, void (*Handler)(const char *Group, const char *Item, const char *Value));
-
-enum OnEventFlags {
- OEF_ENABLED = 1,
- OEF_TEMPORARY = 2,
- OEF_SAVE = 4,
- OEF_HIGH_PRIORITY = 8,
-};
-
-struct OnEventInfo {
- int Slot;
- int Flags; // 1 = enabled, 2 = temporary, 4 = save
- char EventName[32];
- char Match[10][80];
- char Response[500];
- hexchat_hook *Hook;
-};
-
-#define ONEVENTS_SIZE 100
-struct OnEventInfo *OnEventInfos[ONEVENTS_SIZE];
-
-enum ConfigTypes {
- CONFIG_STRING,
- CONFIG_BOOLEAN,
- CONFIG_INTEGER,
-};
-
-struct ConfigItem {
- char *Group;
- char *Item;
- void *Data;
- char Type;
- short Len;
-} ConfigOptions[] = {
- {"General", "RandomType", &RandomType, CONFIG_INTEGER, 0},
- {"General", "TextEditor", &TextEditor, CONFIG_STRING, 512},
- {"General", "QuietOnEvents", &QuietOnEvents, CONFIG_BOOLEAN, 0},
- {"Automatic", "ForceUTF8", &ForceUTF8, CONFIG_BOOLEAN, 0},
- {"Automatic", "CharCounter", &CharCounter, CONFIG_BOOLEAN, 0},
- {"Automatic", "PMAlerts", &PMAlerts, CONFIG_BOOLEAN, 0},
- {"Automatic", "PMAlertsEvenWithoutFocus", &PMAlertsEvenWithoutFocus, CONFIG_BOOLEAN, 0},
- {"Automatic", "PMAlertsEvenSameNetwork", &PMAlertsEvenWithSameNetwork, CONFIG_BOOLEAN, 0},
- {"Automatic", "RejoinOnKick", &RejoinKick, CONFIG_BOOLEAN, 0},
- {"Automatic", "JoinOnInvite", &JoinOnInvite, CONFIG_BOOLEAN, 0},
- {"Automatic", "DisableAutoIdent", &DisableAutoIdent, CONFIG_BOOLEAN, 0},
- {"Automatic", "DisableAutoNickColorReset", &DisableAutoNickDeblue, CONFIG_BOOLEAN, 0},
- {"Automatic", "DisableAutoGhost", &DisableAutoGhost, CONFIG_BOOLEAN, 0},
- {"Automatic", "DisableAutoGhostChainBreak", &DisableAutoGhostChainBreak, CONFIG_BOOLEAN, 0},
- {"Automatic", "Activity2Focus", &Activity2Focus, CONFIG_BOOLEAN, 0},
- {"Automatic", "DisableNetworkSayer", &DisableShowNetworkOnJoin, CONFIG_BOOLEAN, 0},
- {"Automatic", "DisableHighlights", &EatHighlights, CONFIG_BOOLEAN, 0},
-// {"Automatic", "MoveNotifyToServerTab", &MoveNotifyToServer, CONFIG_BOOLEAN, 0},
-// {"Automatic", "MoveServicesToServerTab", &MoveServicesToServer, CONFIG_BOOLEAN, 0},
- {"PrettyJanus", "Disabled", &DisablePrettyJanus, CONFIG_BOOLEAN, 0},
- {"PrettyJanus", "Nick0", JanusLinkbots[0], CONFIG_STRING, 32},
- {"PrettyJanus", "Nick1", JanusLinkbots[1], CONFIG_STRING, 32},
- {"PrettyJanus", "Nick2", JanusLinkbots[2], CONFIG_STRING, 32},
- {"PrettyJanus", "Nick3", JanusLinkbots[3], CONFIG_STRING, 32},
- {"Pesterchum", "Disabled", &DisablePesterchum, CONFIG_BOOLEAN, 0},
- {"Pesterchum", "ChannelCommand", PesterchumChanHook, CONFIG_STRING, 512},
- {"Pesterchum", "Color", PesterchumColor, CONFIG_STRING, 64},
- {NULL}, // <-- end marker
-};
-
-void strlcpy(char *Destination, const char *Source, int MaxLength) {
- // MaxLength is directly from sizeof() so it includes the zero
- int SourceLen = strlen(Source);
- if((SourceLen+1) < MaxLength)
- MaxLength = SourceLen + 1;
- memcpy(Destination, Source, MaxLength-1);
- Destination[MaxLength-1] = 0;
-}
-
-int memcasecmp(const char *Text1, const char *Text2, int Length) {
- for(;Length;Length--)
- if(tolower(*(Text1++)) != tolower(*(Text2++)))
- return 1;
- return 0;
-}
-
-static int isgraph2(char k) { // unicode version
- unsigned char k2 = (unsigned char)k;
- if(!isgraph(k) && k2 < 0xc0) return 0;
- return k2<0x80||k2>0xbf;
-}
-
-static int iscontinuationbyte(char k) {
- unsigned char k2 = (unsigned char)k;
- return k2>=0x80&&k2<=0xbf;
-}
-
-static char *ReadTextFile(const char *Name) {
- FILE *File = fopen(Name,"rb");
- if(!File) return NULL;
- fseek(File, 0, SEEK_END);
- long FileSize = ftell(File);
- rewind(File);
- char *Buffer = (char*)malloc(sizeof(char)*FileSize+1);
- if(Buffer == NULL) {
- fclose(File);
- return NULL;
- }
- if(FileSize != fread(Buffer,1,FileSize,File)) {
- fclose(File);
- return NULL;
- }
- fclose(File);
- Buffer[FileSize] = 0;
- return Buffer;
-}
-
-static int OETextMatch(char *Inputs[], const char *MatchTo) {
- int CaseSensitive = 0, Negate = 0, Decision = 0;
- int Wild = 0, InputNum, SpecialInput = 0;
- const char *Seek = MatchTo+1;
- char *Stripped;
- InputNum = MatchTo[0] - '0';
- char Input[800];
- if(InputNum < 0 || InputNum > 4)
- return 0;
- if(InputNum == 0) { // special set of inputs
- SpecialInput = 1;
- const char *CopyFrom = NULL;
- switch(*(Seek++)) {
- case 'c': CopyFrom = hexchat_get_info(ph, "channel"); break;
- case 'n': CopyFrom = hexchat_get_info(ph, "nick"); break;
- case 'N': CopyFrom = hexchat_get_info(ph, "network"); break;
- case 's': CopyFrom = hexchat_get_info(ph, "server"); break;
- case 'w': CopyFrom = hexchat_get_info(ph, "win_status"); break;
- }
- if(!CopyFrom) CopyFrom = "";
- strlcpy(Input, CopyFrom, 800);
- } else {
- Stripped = hexchat_strip(ph, Inputs[InputNum], -1, 1 | 2);
- strlcpy(Input, Stripped, 800);
- hexchat_free(ph, Stripped);
- }
- char Match[strlen(MatchTo)+1];
- if(*Seek == '!') {
- Negate = 1;
- Seek++;
- }
- if(*(Seek++) != '=')
- return 0;
- if(*Seek == '=') { // two equals signs, turn on case sensitive mode
- CaseSensitive = 1;
- Seek++;
- }
- if(*Seek == '*') { // left wildcard
- Wild |= 1;
- Seek++;
- }
- strcpy(Match, Seek);
- char *End = strrchr(Match, 0);
- if(End[-1] == '*') { // right wildcard
- Wild |= 2;
- End[-1] = 0;
- }
- if(!CaseSensitive) { // make input all lowercase if not case sensitive
- char *ToLower;
- for(ToLower = Input; *ToLower; ToLower++)
- *ToLower = tolower(*ToLower);
- for(ToLower = Match; *ToLower; ToLower++)
- *ToLower = tolower(*ToLower);
- }
- switch(Wild) {
- case 0: // @
- Decision = !strcasecmp(Input, Match);
- break;
- case 1: // *@
- End = strrchr(Input, 0);
- End -= strlen(Match);
- Decision = !memcasecmp(End, Match, strlen(Match));
- break;
- case 2: // @*
- Decision = !memcasecmp(Input, Match, strlen(Match));
- break;
- case 3: // *@*
- Decision = strstr(Input, Match) != NULL;
- break;
- }
- if(Negate)
- Decision ^= 1;
- return Decision;
-}
-
-static void TextInterpolate(char *Out, const char *In, char Prefix, const char *ReplaceThis, const char *ReplaceWith[]) {
- while(*In) {
- if(*In != Prefix)
- *(Out++) = *(In++);
- else {
- In++;
- char *Find = strchr(ReplaceThis, *(In++));
- if(Find) {
- int This = Find - ReplaceThis;
- strcpy(Out, ReplaceWith[This]);
- Out += strlen(ReplaceWith[This]);
- } else {
- *(Out++) = Prefix;
- *(Out++) = In[-1];
- }
- }
- }
- *Out = 0;
-}
-
-struct SpawnInfo {
- int Slot;
- int TimeAmount;
- char Command[1024];
- hexchat_context *Context;
-};
-
-static int spawntimer_cb(void *userdata) {
- struct SpawnInfo *Spawn = (struct SpawnInfo *)userdata;
- if(Spawn) {
- if(hexchat_set_context(ph,Spawn->Context))
- hexchat_command(ph, Spawn->Command);
- else
- hexchat_printf(ph, "%sContext switch failed for spawn %i \n", SparklesUser, Spawn->Slot);
- SpawnHook[Spawn->Slot]=NULL;
- free(Spawn);
- }
- return 0;
-}
-
-static void UpdateCharCounter() {
- if(!strlen(hexchat_get_info(ph, "host")))
- return;
-
- int Len = strlen(hexchat_get_info(ph, "inputbox"));
- hexchat_context *Context = hexchat_get_context(ph);
- int Id;
- hexchat_get_prefs(ph, "id", NULL, &Id);
-
- hexchat_list *list = hexchat_list_get(ph, "channels");
- if(list) {
- while(hexchat_list_next(ph, list)) {
- if(hexchat_list_int(ph, list, "type")==1 && hexchat_list_int(ph, list, "id")==Id) { // server
- if(hexchat_set_context(ph,(hexchat_context *)hexchat_list_str(ph, list, "context"))) {
- if(Len)
- hexchat_commandf(ph, "settab %-3i %s", Len, hexchat_get_info(ph, "channel"));
- else
- hexchat_commandf(ph, "settab %s", hexchat_get_info(ph, "channel"));
- }
- }
- }
- hexchat_list_free(ph, list);
- }
- hexchat_set_context(ph, Context);
-}
-
-static int timer_cb(void *userdata) {
- if(CharCounter)
- UpdateCharCounter();
- return 1;
-}
-
-static int charcounter_cb(char *word[], void *userdata) {
- if(CharCounter)
- UpdateCharCounter();
- return HEXCHAT_EAT_NONE;
-}
-
-static int on_event_cb(char *word[], void *userdata) {
- struct OnEventInfo *Info = (struct OnEventInfo*)userdata;
- if(!Info)
- return HEXCHAT_EAT_NONE;
- int i;
- for(i=0;Info->Match[i][0];i++)
- if(!OETextMatch(word, Info->Match[i]))
- return HEXCHAT_EAT_NONE;
-
- char *Word1 = hexchat_strip(ph, word[1], -1, 3);
- char *Word2 = hexchat_strip(ph, word[2], -1, 3);
- char *Word3 = hexchat_strip(ph, word[3], -1, 3);
- char *Word4 = hexchat_strip(ph, word[4], -1, 3);
- char Buffer[2048];
- const char *ReplaceWith[] = {hexchat_get_info(ph, "nick"), hexchat_get_info(ph, "channel"), Word1, Word2, Word3, Word4};
- TextInterpolate(Buffer, Info->Response, '$', "nc1234", ReplaceWith);
- hexchat_free(ph, Word1);
- hexchat_free(ph, Word2);
- hexchat_free(ph, Word3);
- hexchat_free(ph, Word4);
-
- if(!strcasecmp(Buffer, "DeleteEvent"))
- return HEXCHAT_EAT_ALL;
- if(!strcasecmp(Buffer, "NoHilight") || !strcasecmp(Buffer, "NoHighlight")) {
- if(!strcasecmp(Info->EventName, "Channel Msg Hilight"))
- hexchat_emit_print(ph, "Channel Message", word[1], word[2], word[3], word[4], NULL);
- else if(!strcasecmp(Info->EventName, "Channel Action Hilight"))
- hexchat_emit_print(ph, "Channel Action", word[1], word[2], word[3], word[4], NULL);
- return HEXCHAT_EAT_ALL;
- }
-
- hexchat_command(ph, Buffer);
- if(Info->Flags & OEF_TEMPORARY) {
- QuietOnEvents++;
- hexchat_commandf(ph, "spark onevent delete %i", Info->Slot);
- QuietOnEvents--;
- }
-
- return HEXCHAT_EAT_NONE;
-}
-
-static int privatemessage_cb(char *word[], void *userdata) {
- if(PMAlerts) {
- if(!PMAlertsEvenWithoutFocus) {
-/* well apparently this is in xchat already
- HWND FGWindow = GetForegroundWindow();
- HWND XChat = (HWND)hexchat_get_info(ph, "win_ptr");
- if(FGWindow != XChat)
- return HEXCHAT_EAT_NONE;
-*/
- if(strcasecmp(hexchat_get_info(ph, "win_status"), "active"))
- return HEXCHAT_EAT_NONE;
- }
- hexchat_context *Focused = hexchat_find_context(ph, NULL, NULL);
- hexchat_context *This = hexchat_get_context(ph);
- if(Focused == This)
- return HEXCHAT_EAT_NONE;
- char Network[32];
- strlcpy(Network, hexchat_get_info(ph, "network"), 32);
- hexchat_set_context(ph, Focused);
- if(PMAlertsEvenWithSameNetwork || !hexchat_get_info(ph, "network") || strcasecmp(Network, hexchat_get_info(ph, "network")))
- hexchat_printf(ph, "----\t\x03" "31PM on %s with %s: %s", Network, word[1], word[2]);
- hexchat_set_context(ph, This);
- }
- return HEXCHAT_EAT_NONE;
-}
-
-int MakeDirectory(const char *Path) {
-#ifdef _WIN32
- return CreateDirectory(Path, NULL);
-#else
- return !mkdir(Path, 0700);
-#endif
-}
-
-char *FindCloserPointer(char *A, char *B) {
- if(!A) // doesn't matter if B is NULL too, it'll just return the NULL
- return B;
- if(!B || A < B)
- return A;
- return B;
-}
-
-int CreateDirectoriesForPath(const char *Folders) {
- char Temp[strlen(Folders)+1];
- strcpy(Temp, Folders);
- struct stat st = {0};
-
- char *Try = Temp;
- if(Try[1] == ':' && Try[2] == '\\') // ignore drive names
- Try = FindCloserPointer(strchr(Try+3, '/'), strchr(Try+3, '\\'));
-
- while(Try) {
- char Restore = *Try;
- *Try = 0;
- if(stat(Temp, &st) == -1) {
- MakeDirectory(Temp);
- if(stat(Temp, &st) == -1)
- return 0;
- }
- *Try = Restore;
- Try = FindCloserPointer(strchr(Try+1, '/'), strchr(Try+1, '\\'));
- }
- return 1;
-}
-
-static unsigned int MZXRand(unsigned long long range) {
- static unsigned long long seed = 0;
- unsigned long long value;
- // If the seed is 0, initialise it with time and clock
- if(seed == 0)
- seed = time(NULL) + clock();
- seed = seed * 1664525 + 1013904223;
- value = (seed & 0xFFFFFFFF) * range / 0xFFFFFFFF;
- return (unsigned int)value;
-}
-
-static int RepeatRand(int Max) {
- Max = abs(Max);
- int Mask = 1;
- while(Mask < (Max-1))
- Mask = (Mask<<1) | 1;
- int Try;
- while(1) {
- if(RandomType!=3)
- Try = rand()&Mask;
- else
- Try = MZXRand(Mask+1);
- if(Try > (Max-1)) continue;
- break;
- }
- return Try;
-}
-
-static int rand2(int max) {
- if(max <= 0) return 0;
- switch(RandomType) {
- default:
- return rand()%max;
- case 1:
- return RepeatRand(max);
- case 2:
- return MZXRand(max);
- case 3:
- return RepeatRand(max);
- }
-}
-
-static int IsPesterchum() {
- const char *Net = hexchat_get_info(ph,"network");
- if(Net == NULL) return 0;
- return !strcasecmp(Net, PESTERCHUM_NETWORK);
-}
-static int IsChannel() {
- const char *Chan = hexchat_get_info(ph,"channel");
- if(Chan == NULL) return 0;
- return *Chan == '#';
-}
-
-static int MyNickCmp(char *N1, char *N2) {
- char *StripName;
- StripName = hexchat_strip(ph, N1, -1, 3);
- if(StripName == NULL)
- return 0;
- if(!strcasecmp(StripName, N2)) {
- hexchat_free(ph, StripName);
- return 1;
- }
- hexchat_free(ph, StripName);
- return 0;
-}
-
-struct RandomReplaceList {
- char In; int Amount; char *Out[8];
-};
-
-struct RandomReplaceList AccentList[] = {
- {'A',6,{"À","Á","Â","Ã","Ä","Å"}},
- {'a',6,{"à","á","â","ã","ä","å"}},
- {'E',4,{"È","É","Ê","Ë"}},
- {'e',6,{"è","é","ê","ë","e","e"}},
- {'O',6,{"Ò","Ó","Ô","Õ","Ö","Ø"}},
- {'o',6,{"ò","ó","ô","õ","ö","ø"}},
- {'U',4,{"Ù","Ú","Û","Ü"}},
- {'u',4,{"ù","ú","û","ü"}},
- {'I',4,{"Ì","Í","Î","Ï"}},
- {'i',4,{"ì","í","î","ï"}},
- {0}
-};
-
-static char *AccentFilter(char *Output, char *Input) {
- char *Poke = Output, *Peek = Input;
- while(*Peek) {
- char k = *(Peek++);
- char *Replacement = NULL;
- if(k == 'N') Replacement = "Ñ";
- if(k == 'n') Replacement = "ñ";
- if(k == 'S') Replacement = "Š";
- if(k == 's') Replacement = "š";
- if(k == 'Z') Replacement = "Ž";
- if(k == 'y') Replacement = "ý";
- if(k == 'Y') Replacement = "Ý";
- if(k == 'D') Replacement = "Ð";
- if(k == 'C') Replacement = "Ç";
- if(k == 'c') Replacement = "ç";
- if(k == 'B') Replacement = "ß";
- int i;
- for(i=0;AccentList[i].In;i++)
- if(k==AccentList[i].In) {
- int j = rand2(AccentList[i].Amount);
- Replacement = AccentList[i].Out[j];
- break;
- }
- if(Replacement) {
- strcpy(Poke, Replacement);
- Poke += strlen(Replacement);
- } else
- *(Poke++) = k;
- }
- *Poke = 0;
- return Output;
-}
-
-struct ReplaceList {
- char *In; char *Out; int Mode;
-};
-
-struct ReplaceList SellyList[] = {
- {"you", "u", 0}, {"your", "ur", 0}, {"you're", "ur", 0}, {"know", "kno", 0}, {"threw", "thru", 0}, {"through", "thru", 0},
- {"where", "where", 0}, {"there", "there", 0}, {"place", "plase", 0}, {"really", "reely", 0},
- {"yone", "1", 0}, {" one", " 1", 0}, {"yeah", "ya", 0}, {"mean", "meen", 0}, {"because", "cuz", 0},
- {"'cause", "cuz", 0}, {"you", "u", 0}, {"i'm", "im", 0}, {"though", "tho", 0}, {"weren't", "wernt", 0}, {"people", "ppl", 0},
- {"weird", "wierd", 0}, {"i'm going to", "ima", 0}, {"going to", "gunna", 0}, {"gonna", "gunna", 0}, {"until", "till", 0},
- {"when", "wen", 0}, {"like", "liek", 0}, {"person", "persin", 0}, {"here", "heer", 0}, {"probably", "probly", 0}, {"should", "shud", 0},
- {"are you", "ru", 0}, {"what", "wat", 0}, {"tried", "tryed", 0}, {"ould", "ud", 0}, {"bye", "bai", 0}, {" are ", " r ", 0}, {"really", "rlly", 0},
- {"please", "plz", 0}, {"'t", "t", 0}, {"'ll", "ll", 0}, {"'s", "s", 0}, {"'re", "re", 0}, {"'ve", "ve", 0}, {"'d", "d", 0},
-
- {"why", "y", 1}, {"was", "wuz", 1}, {"please", "plz", 1}, {" the ", " teh ", 1}, {"more", "moar", 1}, {"with", "wif", 1},
- {"my", "mai", 1}, // gud
- {NULL, NULL, 0}
-};
-
-static char *SellyFilter(char *Output, char *Input, int Mode) {
- char *Poke = Output;
- char *Peek = Input;
- void Replace(char *Old, char *New, int Mode) {
- int i=0;
- if(Peek==Input)
- if(Old[0]==' ') {
- Old++;
- New++;
- }
- for(i=0;Old[i];i++)
- if(Old[i] != tolower(Peek[i]))
- return;
- i=0;
- memcpy(Poke, New, strlen(New));
- Peek+=strlen(Old)-1;
- Poke+=strlen(New)-1;
- }
- while(*Peek) {
- if((Peek == Input) || (Peek[-1]!=':' && Peek[-1]!=';'))
- *Poke = tolower(*Peek);
- else
- *Poke = *Peek;
- int i=0;
- for(i=0;SellyList[i].In != NULL;i++)
- if(Mode >= (SellyList[i].Mode & 3))
- Replace(SellyList[i].In, SellyList[i].Out, 0);
- Poke++; Peek++;
- }
- *Poke = 0;
- return Output;
-}
-
-static char *ScarletFilter(char *Output, char *Input) {
- char *Poke = Output;
- char *Peek = Input;
- void Replace(char *Old, char *New, int Mode) {
- int i=0, WasUpper=0;
- if(isupper(*Peek))
- WasUpper=1;
- if(Peek==Input)
- if(Old[0]==' ') {
- Old++;
- New++;
- }
- for(i=0;Old[i];i++)
- if(Old[i] != tolower(Peek[i]))
- return;
- int AllCaps = 1;
- for(i=0;Old[i];i++) {
- if(isalpha(Peek[i]) && islower(Peek[i])) {
- AllCaps = 0;
- break;
- }
- }
- i=0;
- memcpy(Poke, New, strlen(New));
- if(AllCaps)
- for(i=0;i<strlen(New);i++)
- Poke[i] = toupper(Poke[i]);
- if(WasUpper)
- *Poke = toupper(*Poke);
- Peek+=strlen(Old)-1;
- Poke+=strlen(New)-1;
- }
- while(*Peek) {
- *Poke = *Peek;
- Replace("really", "rilly", 0);
- Replace("stupid", "stoopid", 0);
- Replace("because", "cuz", 0);
- Replace("'cause", "cuz", 0);
- Replace("in a", "inna", 0);
- Replace("suppose", "s'pose", 0);
- Replace("nope!", "nuh-uh!", 0);
- Replace("uh huh", "ah-hah", 0);
- Replace("some", "sum", 0);
- Replace(" and ", " an' ", 0);
- Replace("was", "wuz", 0);
- Replace("is that", "izzat", 0);
- Replace("hello", "hallo", 0);
- Replace("ever", "eva", 0);
- Replace("'kay", "a'kay", 0);
- Replace("okay", "a'kay", 0);
- Replace("oh no!", "OH NOES!", 0);
- Replace("just ", "jus' ", 0);
- Poke++; Peek++;
- }
- *Poke = 0;
- return Output;
-}
-
-static char *CustomReplace(char *Output, char *Input, char *List) {
- char *Poke = Output;
- char *Peek = Input;
-
- char NewList[768];
- strcpy(NewList, List);
- char *Words[100];
- int NumWords = 0;
- char *WordPtr = NewList;
- char *NextPtr = NULL;
-
- int KeepCaps = 1;
-
- while(1) {
- NextPtr = strstr(WordPtr, "||");
- if(NextPtr == NULL) {
-// hexchat_printf(ph, "%s\n", WordPtr);
- Words[NumWords++]=WordPtr;
- break;
- } else {
- *NextPtr = 0;
- Words[NumWords++] = WordPtr;
-// hexchat_printf(ph, "%s\n", WordPtr);
- WordPtr = NextPtr + 2;
- }
- }
-
- void Replace(char *Old, char *New, int Mode) {
- int i=0, WasUpper=0;
- if(isupper(*Peek))
- WasUpper=1;
- if(Peek==Input && Old[0]==' ') {
- Old++;
- New++;
- }
- for(i=0;Old[i];i++)
- if(Old[i] != tolower(Peek[i]))
- return;
- int AllCaps = 1;
- for(i=0;Old[i];i++) {
- if(isalpha(Peek[i]) && islower(Peek[i])) {
- AllCaps = 0;
- break;
- }
- }
- i=0;
- memcpy(Poke, New, strlen(New));
- if(AllCaps && KeepCaps)
- for(i=0;i<strlen(New);i++)
- Poke[i] = toupper(Poke[i]);
- if(WasUpper)
- *Poke = toupper(*Poke);
- Peek+=strlen(Old)-1;
- Poke+=strlen(New)-1;
- }
- char *ReplaceTo = NULL; // word to replace to
- while(*Peek) {
- *Poke = *Peek;
- KeepCaps = 1;
- int i;
- for(i=0;i<NumWords;i++) {
-// hexchat_printf(ph, "%s - ", Words[i]);
- if(Words[i][0] == '>') // change to
- ReplaceTo = Words[i]+1;
- if(Words[i][0] == '<') // change from
- if(ReplaceTo!=NULL)
- Replace(Words[i]+1, ReplaceTo, 0);
- if(Words[i][0] == '^') { // set flags
- if(Words[i][1] == 'K' && Words[i][2] == 'C')
- KeepCaps ^= 1;
- }
- }
- Poke++; Peek++;
- }
- *Poke = 0;
- return Output;
-}
-
-static void ShuffleChars(char *Poke, char *Peek, int Swaps, int Flags) {
- strcpy(Poke,Peek);
- char *End = Poke + strlen(Poke);
- int i,EndNow = 0;
- char *Next;
- while(Poke <= End && !EndNow) {
- Next = Poke;
- while(isalpha(*Next))
- Next++;
- int WordLen = Next - Poke;
- if(WordLen>=2) { // must be at least 4 letters
- for(i=0;i<Swaps;i++) {
- int Max = WordLen - 2;
- int A=(rand2(Max)) + 1;
- int B=(rand2(Max)) + 1;
- char t;
- t = Poke[A];
- Poke[A] = Poke[B];
- Poke[B] = t;
- }
- }
- Poke = Next; // next word
- while(!isalpha(*Poke)) {
- if(*Poke == 0) { // no more words?
- EndNow = 1;
- break;
- }
- Poke++;
- }
- }
-}
-
-// used for /spark atloop
-static int AttributeLoop(char *Out, char *In, char *Loop) {
- int Caps = 0;
- int i = 0; // input index
- int o = 0; // output index
- int s = 0; // script
- int LP = 0; // loop position
-
- int RainbowIndex = 0;
-
- int EndI = strlen(In);
-// int EndL = strlen(Loop);
- int LoopTimes = 0;
-
- for(;i<EndI;) {
- if(iscontinuationbyte(In[i])) {
- while(iscontinuationbyte(In[i])) {
- Out[o++] = In[i++];
- }
- continue;
- }
- switch(Loop[s++]) {
- case 'c':
- Out[o++]=0x03;
- if(tolower(Loop[s]) != 'g') {
- Out[o++]=Loop[s++];
- Out[o++]=Loop[s++];
- }
- else {
- Out[o++]=Rainbow[RainbowIndex][0];
- Out[o++]=Rainbow[RainbowIndex][1];
- if(Loop[s]!='G')
- RainbowIndex++;
- if(RainbowIndex > 4) RainbowIndex = 0;
- s++;
- }
- if(Loop[s] == ',') {
- Out[o++]=Loop[s++];
- if(tolower(Loop[s]) != 'g') {
- Out[o++]=Loop[s++];
- Out[o++]=Loop[s++];
- }
- else {
- Out[o++]=Rainbow[RainbowIndex][0];
- Out[o++]=Rainbow[RainbowIndex][1];
- if(Loop[s]!='G')
- RainbowIndex++;
- if(RainbowIndex > 4) RainbowIndex = 0;
- s++;
- }
- }
- break;
- case 'u': Out[o++]=0x1f; break;
- case 'b': Out[o++]=0x02; break;
- case 'i': Out[o++]=0x1d; break;
- case 'R': Out[o++]=0x16; break;
- case 'p': Out[o++]=0x0f; break;
- case '_': Out[o++]=' '; break;
-
- case '\'': Out[o++]=Loop[s++]; break;
- case '*':
- switch(Caps) {
- case 0: Out[o++]=In[i++]; break;
- case 1: Out[o++]=toupper(In[i++]); break;
- case 2: Out[o++]=tolower(In[i++]); break;
- case 3: Out[o++]=(rand()&1)?toupper(In[i++]):tolower(In[i++]); break;
- }
- break;
-
- case 'C':
- switch(Loop[s++]) {
- case 'N': Caps=0; break;
- case 'U': Caps=1; break;
- case 'L': Caps=2; break;
- case 'R': Caps=3; break;
- }
- break;
-
- case '`':
- switch(Loop[s++]) {
- case '?':
- while(!(isgraph2(In[i]) || (In[i]==' ')) && i<EndI)
- Out[o++]=In[i++];
- break;
- case 'c':
- Out[o++]=0x03; break;
- break;
- }
- break;
-
-
- case '?':
- while(!isgraph2(In[i]) && i<EndI)
- Out[o++]=In[i++];
- switch(Caps) {
- case 0: Out[o++]=In[i++]; break;
- case 1: Out[o++]=toupper(In[i++]); break;
- case 2: Out[o++]=tolower(In[i++]); break;
- case 3: Out[o++]=(rand()&1)?toupper(In[i++]):tolower(In[i++]); break;
- }
- break;
-
- case '|': LP=s; break;
- case 0: s=LP; LoopTimes++; if(LoopTimes > 1000) return 1; break;
- }
- }
- Out[o]=0;
- return 0;
-}
-
-static char *Adj(int Amount, char *Word, ...);
-static char *TrollFilter(char *Output, char *Input, char *Troll) {
- if(Troll[0] == 0) return "???";
- if(Troll[1] == 0) return "???";
-
- char *Poke = Output;
- char *Peek = Input;
- int j;
- void LowerAll() {
- int i;
- for(i=0;Output[i];i++)
- Output[i]=tolower(Output[i]);
- }
- void UpperAll() {
- int i;
- for(i=0;Output[i];i++)
- Output[i]=toupper(Output[i]);
- }
- void Replace(char *Old, char *New, int Mode) {
- int i=0;
- if(Peek==Input && Old[0]==' ') {
- Old++;
- New++;
- }
- for(i=0;Old[i];i++)
- if(Old[i] != tolower(Peek[i]))
- return;
- i=0;
- memcpy(Poke, New, strlen(New));
- Peek+=strlen(Old)-1;
- Poke+=strlen(New)-1;
- }
- int TrollNum = 0;
- switch(tolower(Troll[0])) {
- case 'a': TrollNum|=0; break;
- case 't': TrollNum|=4; break;
- case 'g': TrollNum|=8; break;
- case 'c': TrollNum|=12; break;
- }
- switch(tolower(Troll[1])) {
- case 'a': TrollNum|=0; break;
- case 't': TrollNum|=1; break;
- case 'g': TrollNum|=2; break;
- case 'c': TrollNum|=3; break;
- }
-
- if(Troll[0]=='U'&&Troll[1]=='U') {
- while(*Peek) {
- *Poke = *Peek;
- if(tolower(Peek[0]) == 'u') *Poke = 'U';
- else *Poke = tolower(*Peek);
- Poke++; Peek++;
- }
- } else if(Troll[0]=='u'&&Troll[1]=='u') {
- while(*Peek) {
- *Poke = *Peek;
- if(toupper(Peek[0]) == 'U') *Poke = 'u';
- else *Poke = toupper(*Peek);
- Poke++; Peek++;
- }
- } else if(tolower(Troll[0])=='l'&&tolower(Troll[1])=='p') {
- while(*Peek) {
- *Poke = *Peek;
- if(tolower(Peek[0]) == 'a') *Poke = '4';
- if(tolower(Peek[0]) == 'i') *Poke = '1';
- if(tolower(Peek[0]) == 'e') *Poke = '3';
- Poke++; Peek++;
- }
- LowerAll();
- } else if(tolower(Troll[0])=='m'&&tolower(Troll[1])=='c') {
- while(*Peek) {
- *Poke = toupper(*Peek);
- if(tolower(Peek[0]) == 'a') *Poke = '4';
- if(tolower(Peek[0]) == 's') *Poke = '5';
- if(tolower(Peek[0]) == 'o') *Poke = '0';
- if(tolower(Peek[0]) == 't') *Poke = '7';
- if(tolower(Peek[0]) == 'b') *Poke = '8';
- if(tolower(Peek[0]) == 'i') *Poke = '1';
- if(tolower(Peek[0]) == 'e') *Poke = '3';
- Poke++; Peek++;
- }
- } else if(tolower(Troll[0])=='k'&&tolower(Troll[1])=='v') {
- while(*Peek) {
- *Poke = *Peek;
- if(tolower(Peek[0]) == 'b') *Poke = '6';
- if(tolower(Peek[0]) == 'o') *Poke = '9';
- Poke++; Peek++;
- }
- } else if(tolower(Troll[0])=='m'&&tolower(Troll[1])=='l') {
- strcpy(Poke, Adj(8, "(=`ω´=) ","(^•ω•^) ","(=^•^=) ","(=^•ω•^=) ","(^•o•^) ","(=^-ω-^=) ","(=^ω^=) ","(=TωT=) "));
- Poke = strchr(Poke, 0);
- if(!Poke) return "???";
- while(*Peek) {
- *Poke = *Peek;
- Replace("ee", "33", 0);
- Replace("pause", "pawse", 0);
- Replace(" per", " purr", 0);
- Replace(" for", " fur", 0);
- Replace(" pos", " paws", 0);
- Replace(" pro", " purro", 0);
- Replace(":3", ":33", 0);
- Replace("x3", "X33", 0);
- Replace(":D", ":DD", 0);
- Replace(":)", ":))", 0);
- Replace(":(", ":((", 0);
- Replace("transparent", "transpurrent", 0);
- Replace("hypocrite", "hypurrcrite", 0);
- Poke++; Peek++;
- }
- } else if(tolower(Troll[0])=='a'&&tolower(Troll[1])=='s') {
- while(*Peek) {
- *Poke = *Peek;
- if(tolower(Peek[0]) == 'b') *Poke = '8';
- Poke++; Peek++;
- }
- } else if(tolower(Troll[0])=='p'&&tolower(Troll[1])=='m') {
- while(*Peek) {
- *Poke = *Peek;
- if(tolower(Peek[0]) == 'o') *(++Poke) = '+';
- Replace(" plus", " +", 0);
- Poke++; Peek++;
- }
- } else if(tolower(Troll[0])=='m'&&tolower(Troll[1])=='p') {
- while(*Peek) {
- *Poke = *Peek;
- Replace("h", ")(", 0);
- Replace("H", ")(", 0);
- Replace(":", "38", 0);
- if(*Peek == 'E') {
- *(Poke++) = '-';
- *Poke = 'E';
- }
- Poke++; Peek++;
- }
- } else if(tolower(Troll[0])=='k'&&tolower(Troll[1])=='m') {
- *(Poke++) = 0x02;
- *(Poke++) = 0x03;
- *(Poke++) = '1';
- *(Poke++) = '3';
- *(Poke++) = ',';
- *(Poke++) = '0';
- *(Poke++) = '1';
- while(*Peek) {
- *Poke = toupper(*Peek);
- Poke++; Peek++;
- }
- } else if(tolower(Troll[0])=='h'&&tolower(Troll[1])=='z') {
- strcpy(Poke, "8=D < ");
- Poke += 6;
-
- while(*Peek) {
- *Poke = *Peek;
- Replace("strong","STRONG",0);
- Replace("loo","100",0);
- Replace("lue ","100 ",0);
- Replace("ool","001",0);
- if(tolower(Peek[0]) == 'x') *Poke = '%';
- Replace("ks","%",0);
- Poke++; Peek++;
- }
- } else if(tolower(Troll[0])=='c'&&tolower(Troll[1])=='r') {
- while(*Peek) {
- *Poke = *Peek;
- if(tolower(Peek[0]) == 'w') *(++Poke) = 'v';
- if(tolower(Peek[0]) == 'v') *(++Poke) = 'w';
- if(Peek[0] == 'B' && isupper(Peek[-1])) *(++Poke) = '8';
- Replace("ing ","in ",0);
- Poke++;
- Peek++;
- }
- } else if(tolower(Troll[0])=='d'&&tolower(Troll[1])=='m') {
- while(*Peek)
- *(Poke++) = *(Peek++);
- UpperAll();
- } else if(tolower(Troll[0])=='r'&&tolower(Troll[1])=='n') {
- while(*Peek) {
- *(Poke++) = *(Peek++);
- if(tolower(Peek[0]) == 'i') *(++Poke) = '1';
- }
- LowerAll();
- } else switch(TrollNum) {
- case 0: // aa
- while(*Peek) {
- *(Poke++) = *(Peek++);
- if(tolower(Peek[-1]) == 'O') Poke[-1] = '0';
- }
- LowerAll();
- break;
- case 1: // at
- while(*Peek) {
- if(isupper(*Peek))
- *Poke = tolower(*Peek);
- else
- *Poke = toupper(*Peek);
- if(Peek == Input)
- *Poke = tolower(*Peek);
- if(*Peek == '.') *Poke = ',';
- Replace(":", "}:", 0);
- Poke++; Peek++;
- }
- break;
- case 2: // ag
- while(*Peek) {
- *(Poke++) = *(Peek++);
- if(tolower(Peek[-1]) == 'b') Poke[-1] = '8';
- Replace("ate", "8", 0);
- Replace("ait", "8", 0);
- Replace(":", "::::", 0);
- }
- break;
- case 3: // ac, http://mspaintadventures.com/?s=6&p=004062
- strcpy(Poke, ":33 < ");
- Poke += 6;
- while(*Peek) {
- *Poke = *Peek;
- Replace("ee", "33", 0);
- Replace("pause", "pawse", 0);
- Replace(" per", " purr", 0);
- Replace(" for", " fur", 0);
- Replace(" pos", " paws", 0);
- Replace(" pro", " purro", 0);
- Replace(":3", ":33", 0);
- Replace("x3", "X33", 0);
- Replace(":D", ":DD", 0);
- Replace(":)", ":))", 0);
- Replace(":(", ":((", 0);
- Replace("transparent", "transpurrent", 0);
- Replace("hypocrite", "hypurrcrite", 0);
-// amewsment, purrk, meowscular, purrtend, oppurtunity, prepawsterous, pawsture, accomeowdate
- Poke++; Peek++;
- }
- LowerAll();
- break;
- case 4: // ta
- while(*Peek) {
- *Poke = *Peek;
- if(tolower(Peek[0]) == 's') *Poke = '2';
- if(tolower(Peek[0]) == 'i') *(++Poke) = 'i';
- Poke++; Peek++;
- }
- Replace(" to"," two",0);
- Replace(" too "," two ",0);
- LowerAll();
- break;
- case 5: // tt
- // not a troll, rose
- while(*Peek)
- *(Poke++) = *(Peek++);
- break;
- case 6: // tg
- // not a troll, dave
- while(*Peek)
- *(Poke++) = *(Peek++);
- break;
- case 7: // tc, gamzee
- j=0;
- while(*Peek) {
- *Poke = ((j&1)?tolower(*Peek):toupper(*Peek));
- if(isgraph2(*Poke)) j++;
- if(*Poke == 'O' && Poke[-1]==':') *Poke = 'o';
- Poke++; Peek++;
- }
- break;
- case 8: // ga
- while(*Peek) {
- *Poke = *Peek;
- if(Peek==Input || (tolower(Peek[-1]) == ' ')) *Poke = toupper(*Peek);
- Poke++; Peek++;
- }
- break;
- case 9: // gt
- // not a troll, john
- while(*Peek)
- *(Poke++) = *(Peek++);
- break;
- case 10: // gg
- // not a troll, jade
- while(*Peek)
- *(Poke++) = *(Peek++);
- break;
- case 11: // gc
- while(*Peek) {
- *Poke = *Peek;
- if(tolower(Peek[0]) == 'a') *Poke = '4';
- if(tolower(Peek[0]) == 'i') *Poke = '1';
- if(tolower(Peek[0]) == 'e') *Poke = '3';
- Poke++; Peek++;
- Replace(":)", ">:]", 0);
- Replace(";)", ">;]", 0);
- }
- UpperAll();
- break;
- case 12: // ca
- while(*Peek) {
- *Poke = *Peek;
- if(tolower(Peek[0]) == 'w') *(++Poke) = 'w';
- if(tolower(Peek[0]) == 'v') *(++Poke) = 'v';
- Replace("ing ","in ",0);
- Poke++;
- Peek++;
- }
- LowerAll();
- break;
- case 13: // ct
- strcpy(Poke, "D --> ");
- Poke += 6;
- while(*Peek) {
- *Poke = *Peek;
- Replace("strong","STRONG",0);
- Replace("loo","100",0);
- Replace("lue ","100 ",0);
- Replace("ool","001",0);
- if(tolower(Peek[0]) == 'x') *Poke = '%';
- Replace(" cross"," %",0);
- Replace(" doublecross"," %%",0);
- Poke++; Peek++;
- }
- break;
- case 14: // cg
- while(*Peek)
- *(Poke++) = toupper(*(Peek++));
- break;
- case 15: // cc
- while(*Peek) {
- *Poke = *Peek;
- Replace("h", ")(", 0);
- Replace("H", ")(", 0);
- Replace(":", "38", 0);
- if(*Peek == 'E') {
- *(Poke++) = '-';
- *Poke = 'E';
- }
- Poke++; Peek++;
- }
- break;
- }
- *Poke = 0;
-
- if(Troll[2] != 0) {
- char Buffer[768];
- TrollFilter(Buffer, Output, Troll+2);
- strcpy(Output, Buffer);
- }
-
- return Output;
-}
-// http://tibasicdev.wikidot.com/83smfont
-void PrintX5Font(char *In, char *Config) {
- if(Config==NULL)
- Config = "@0001";
-
- char NewConfig[20];
- strcpy(NewConfig, Config);
- Config = NewConfig;
-
- int UseReverse = 0, SpecialFG = 0, SpecialBG = 0;
- if(!strcasecmp(Config, "r")) {
- Config = " ????";
- UseReverse = 1;
- }
- if(!strcasecmp(Config, "rainbow")) {
- SpecialFG = 1;
- SpecialBG = 1;
- Config = "@0001";
- }
- if(strlen(Config) >= 5) {
- if(toupper(Config[1])=='R' && toupper(Config[2])=='R') SpecialFG = 1;
- if(toupper(Config[3])=='R' && toupper(Config[4])=='R') SpecialBG = 1;
- }
-
- if(NeedSpaceBetweenX5Font)
- hexchat_commandf(ph, "say ");
- unsigned const char Font[96][6] = {
- { 0, 0, 0, 0, 0, 1}, /* */ { 1, 1, 1, 0, 1, 1}, /* ! */ { 5, 5, 5, 0, 0, 3}, /* " */ {10, 31, 10, 31, 10, 5}, /* # */
- {14, 20, 14, 5, 30, 5}, /* $ */ { 5, 1, 2, 4, 5, 3}, /* % */ { 4, 10, 4, 10, 5, 4}, /* & */ { 1, 1, 1, 0, 0, 1}, /* ' */
- { 1, 2, 2, 2, 1, 2}, /* ( */ { 2, 1, 1, 1, 2, 2}, /* ) */ { 4, 21, 14, 21, 4, 5}, /* * */ { 0, 2, 7, 2, 0, 3}, /* + */
- { 0, 0, 1, 1, 2, 2}, /* , */ { 0, 0, 7, 0, 0, 3}, /* - */ { 0, 0, 0, 0, 1, 1}, /* . */ { 1, 1, 2, 4, 4, 3}, /* / */
- { 2, 5, 5, 5, 2, 3}, /* 0 */ { 2, 6, 2, 2, 7, 3}, /* 1 */ { 6, 1, 2, 4, 7, 3}, /* 2 */ { 6, 1, 2, 1, 6, 3}, /* 3 */
- { 4, 5, 7, 1, 1, 3}, /* 4 */ { 7, 4, 6, 1, 6, 3}, /* 5 */ { 3, 4, 7, 5, 7, 3}, /* 6 */ { 7, 1, 2, 4, 4, 3}, /* 7 */
- { 7, 5, 7, 5, 7, 3}, /* 8 */ { 7, 5, 7, 1, 6, 3}, /* 9 */ { 0, 1, 0, 1, 0, 1}, /* : */ { 0, 1, 0, 1, 2, 2}, /* ; */
- { 1, 2, 4, 2, 1, 3}, /* < */ { 0, 7, 0, 7, 0, 3}, /* = */ { 4, 2, 1, 2, 4, 3}, /* > */ { 6, 1, 2, 0, 2, 3}, /* ? */
- {14, 1, 13, 21, 14, 5}, /* @ */ { 2, 5, 7, 5, 5, 3}, /* A */ { 6, 5, 6, 5, 6, 3}, /* B */ { 3, 4, 4, 4, 3, 3}, /* C */
- { 6, 5, 5, 5, 6, 3}, /* D */ { 7, 4, 6, 4, 7, 3}, /* E */ { 7, 4, 6, 4, 4, 3}, /* F */ { 3, 4, 5, 5, 3, 3}, /* G */
- { 5, 5, 7, 5, 5, 3}, /* H */ { 7, 2, 2, 2, 7, 3}, /* I */ { 1, 1, 1, 5, 7, 3}, /* J */ { 5, 5, 6, 5, 5, 3}, /* K */
- { 4, 4, 4, 4, 7, 3}, /* L */ { 5, 7, 7, 5, 5, 3}, /* M */ { 6, 5, 5, 5, 5, 3}, /* N */ { 7, 5, 5, 5, 7, 3}, /* O */
- { 6, 5, 6, 4, 4, 3}, /* P */ { 7, 5, 5, 7, 3, 3}, /* Q */ { 6, 5, 6, 5, 5, 3}, /* R */ { 3, 4, 2, 1, 6, 3}, /* S */
- { 7, 2, 2, 2, 2, 3}, /* T */ { 5, 5, 5, 5, 7, 3}, /* U */ { 5, 5, 5, 2, 2, 3}, /* V */ { 5, 5, 5, 7, 5, 3}, /* W */
- { 5, 5, 2, 5, 5, 3}, /* X */ { 5, 5, 2, 2, 2, 3}, /* Y */ { 7, 1, 2, 4, 7, 3}, /* Z */ { 3, 2, 2, 2, 3, 2}, /* [ */
- { 4, 4, 2, 1, 1, 3}, /* \ */ { 3, 1, 1, 1, 3, 2}, /* ] */ { 2, 5, 0, 0, 0, 3}, /* ^ */ { 0, 0, 0, 0, 7, 3}, /* _ */
- { 2, 1, 0, 0, 0, 2}, /* ` */ { 0, 3, 5, 5, 3, 3}, /* a */ { 4, 6, 5, 5, 6, 3}, /* b */ { 0, 3, 4, 4, 3, 3}, /* c */
- { 1, 3, 5, 5, 3, 3}, /* d */ { 0, 2, 5, 6, 3, 3}, /* e */ { 1, 2, 3, 2, 2, 2}, /* f */ { 3, 5, 3, 1, 6, 3}, /* g */
- { 4, 6, 5, 5, 5, 3}, /* h */ { 1, 0, 1, 1, 1, 1}, /* i */ { 1, 0, 1, 5, 2, 3}, /* j */ { 4, 4, 5, 6, 5, 3}, /* k */
- { 3, 1, 1, 1, 1, 2}, /* l */ { 0, 26, 21, 21, 17, 5}, /* m */ { 0, 6, 5, 5, 5, 3}, /* n */ { 0, 2, 5, 5, 2, 3}, /* o */
- { 0, 6, 5, 6, 4, 3}, /* p */ { 0, 3, 5, 3, 1, 3}, /* q */ { 0, 5, 6, 4, 4, 3}, /* r */ { 0, 3, 2, 1, 3, 2}, /* s */
- { 2, 3, 2, 2, 1, 2}, /* t */ { 0, 5, 5, 5, 7, 3}, /* u */ { 0, 5, 5, 2, 2, 3}, /* v */ { 0, 17, 21, 21, 10, 5}, /* w */
- { 0, 5, 2, 2, 5, 3}, /* x */ { 0, 5, 5, 2, 4, 3}, /* y */ { 0, 15, 2, 4, 15, 4}, /* z */ { 3, 2, 4, 2, 3, 3}, /* { */
- { 1, 1, 1, 1, 1, 1}, /* | */ { 6, 2, 1, 2, 6, 3}, /* } */ { 0, 5, 10, 0, 0, 4}, /* ~ */
- };
- int Row; char *Peek;
-
- for(Row = 0; Row<5; Row++) {
- char RowBuffer[512];
- *RowBuffer = 0;
- char *Poke = RowBuffer;
-
- for(Peek = In; *Peek; Peek++) {
- int Char = *Peek;
- if(Char > '~' || Char < ' ') Char = '?';
- char FontBits = Font[Char-0x20][Row];
- char Column; char Width = Font[Char-0x20][5];
- for(Column=0;Column<Width+1;Column++)
- *(Poke++) = ((FontBits>>(Width-Column))&1)?'@':' ';
- }
- *(Poke++) = ' ';
- *Poke=0;
-
- char ColorBuffer[512];
- strcpy(ColorBuffer, "");
- Poke = ColorBuffer;
-
- if(!UseReverse) {
- *(Poke++) = 0x03; *(Poke++) = Config[3];
- *(Poke++) = Config[4]; *(Poke++) = ',';
- *(Poke++) = Config[3]; *(Poke++) = Config[4];
- }
-
- for(Peek = RowBuffer; *Peek; Peek++) {
- if(SpecialFG == 1) {
- int x = rand2(5);
- NewConfig[1] = Rainbow[x][0];
- NewConfig[2] = Rainbow[x][1];
- }
- if(SpecialBG == 1) {
- int x = rand2(5);
- NewConfig[2] = Rainbow[x][0];
- NewConfig[3] = Rainbow[x][1];
- }
-
- if(!UseReverse&&(Peek==RowBuffer || Peek[-1]!=Peek[0] || SpecialFG==1)) {
- if(*Peek == '@') {
- *(Poke++) = 0x03; *(Poke++) = Config[1];
- *(Poke++) = Config[2]; *(Poke++) = ',';
- *(Poke++) = Config[1]; *(Poke++) = Config[2];
- } else {
- *(Poke++) = 0x03; *(Poke++) = Config[3];
- *(Poke++) = Config[4]; *(Poke++) = ',';
- *(Poke++) = Config[3]; *(Poke++) = Config[4];
- }
- }
- if(UseReverse && Peek!=RowBuffer && Peek[-1]!=Peek[0]) {
- *(Poke++) = 0x16;
- }
-
- *(Poke++) = Config[0];
- }
-
- *Poke=0;
- hexchat_commandf(ph, "say %s", ColorBuffer);
- }
- NeedSpaceBetweenX5Font=1;
-}
-
-void Print35Font(char *In, char *Config) {
- if(Config==NULL)
- Config = "@0001";
- int i;
- unsigned const short Font[256] = {
- ['0']=075557, ['1']=022222, ['2']=074216, ['3']=071717,
- ['4']=011755, ['5']=061747, ['6']=075747, ['7']=044217,
- ['8']=075757, ['9']=071757, ['!']=020222, ['?']=020317,
- ['A']=055752, ['B']=065656, ['C']=034443, ['D']=065556,
- ['E']=074747, ['F']=044747, ['G']=035543, ['H']=055755,
- ['I']=072227, ['J']=075111, ['K']=055655, ['L']=074444,
- ['M']=055775, ['N']=055556, ['O']=075557, ['P']=044757,
- ['Q']=036552, ['R']=055656, ['S']=071747, ['T']=022227,
- ['U']=075555, ['V']=025555, ['W']=057555, ['X']=055255,
- ['Y']=022755, ['Z']=074217, [' ']=000000,
- ['^']=000052, ['-']=000700, ['+']=002720, ['=']=007070,
- ['.']=022000, [',']=062000, ['_']=070000, ['/']=042221,
- [':']=002020, [';']=062020, ['<']=012421, ['>']=042124,
- ['\\']=012224, ['\"']=000055, ['\'']=000022, ['\2']=077777,
- };
- if(NeedSpaceBetweenX5Font)
- hexchat_commandf(ph, "say ");
- int Row; char *Peek;
- int ColorType[2]={0,0};
- for(i=0;i<2;i++) {
- if(toupper(Config[(i<<1)+1])=='R' && toupper(Config[(i<<1)+2])=='B') ColorType[i] = 1; // horiz rainbow
- if(toupper(Config[(i<<1)+1])=='R' && toupper(Config[(i<<1)+2])=='H') ColorType[i] = 1; // horiz rainbow
- if(toupper(Config[(i<<1)+1])=='R' && toupper(Config[(i<<1)+2])=='V') ColorType[i] = 2; // vert rainbow
- }
-
- for(Row = 0; Row<5; Row++) {
- unsigned short ShiftBy = Row*3;
- unsigned short AndBy = 0x7<<ShiftBy;
- char RowBuffer[512];
- strcpy(RowBuffer, "");
- char *Poke = RowBuffer;
-
- for(Peek = In; *Peek; Peek++) {
- int Char = toupper(*Peek);
- char FontBits = (Font[Char]&AndBy)>>ShiftBy;
- char Column;
- for(Column=0;Column<3;Column++)
- *(Poke++) = ((FontBits<<=1)&8?'@':' ');
- *(Poke++) = ' ';
- }
- *Poke=0;
-
- char ColorBuffer[512];
- strcpy(ColorBuffer, "");
- Poke = ColorBuffer;
-
- int Index = 0;
-
- if(ColorType[1] != 0)
- memcpy(Config+(2)+1,Rainbow[Row%5],sizeof(char)*2);
- //memcpy(Config+(2)+1,"00",sizeof(char)*2);
-
- *(Poke++) = 0x03; *(Poke++) = Config[3];
- *(Poke++) = Config[4]; *(Poke++) = ',';
- *(Poke++) = Config[3]; *(Poke++) = Config[4];
- *(Poke++) = Config[0];
-
-
- for(Peek = RowBuffer; *Peek; Peek++) {
- for(i=0;i<2;i++) {
- switch(ColorType[i]) {
- case 1:
- if(0==(Index&3))
- memcpy(Config+(i<<1)+1,Rainbow[(Index/4)%5],sizeof(char)*2);
- break;
- case 2:
- memcpy(Config+(i<<1)+1,Rainbow[Row%5],sizeof(char)*2);
- break;
- }
- }
- Index++;
-
- if(Peek==RowBuffer || Peek[-1]!=Peek[0]) {
- if(*Peek == '@') {
- *(Poke++) = 0x03; *(Poke++) = Config[1];
- *(Poke++) = Config[2]; *(Poke++) = ',';
- *(Poke++) = Config[1]; *(Poke++) = Config[2];
- } else {
- *(Poke++) = 0x03; *(Poke++) = Config[3];
- *(Poke++) = Config[4]; *(Poke++) = ',';
- *(Poke++) = Config[3]; *(Poke++) = Config[4];
- }
- }
- *(Poke++) = Config[0];
- }
-
- *Poke=0;
- hexchat_commandf(ph, "say %s", ColorBuffer);
- }
- NeedSpaceBetweenX5Font=1;
-}
-
-char *AcidText(char *NewString, char *Input) {
- char *Poke = NewString, *Peek, *StartHere = Input;
- *(Poke++) = 2;
-
- int ColorFrequency = 7;
- if(strlen(Input) > 100) ColorFrequency = 15;
- if(strlen(Input) > 200) ColorFrequency = 31;
- if(strlen(Input) > 300) ColorFrequency = -1;
-
- for(Peek = StartHere;*Peek;Peek++) {
- if(Peek == StartHere || (isgraph2(*Peek) && (ColorFrequency!=-1) && ((rand()&ColorFrequency) == 0))) {
- int Color1 = rand()&15;
- while(Color1 == 1 || Color1 == 14 || Color1 == 0)
- Color1 = rand()&15;
- char ColorString[10];
- *(Poke++) = 3;
- sprintf(ColorString, "%.2i", Color1);
- *(Poke++) = ColorString[0];
- *(Poke++) = ColorString[1];
- if(Peek == StartHere) {
- *(Poke++) = ',';
- *(Poke++) = '0';
- *(Poke++) = '1';
- }
- }
- if((rand()&7) == 0)
- *(Poke++) = 0x1f;
- char k = *Peek;
- *(Poke++) = (rand()&1)?toupper(k):tolower(k);
- }
- *Poke = 0;
- return NewString;
-}
-
-// Used for /spark slashf
-static char *sparkles_text_unescape(char *Poke, char *Peek) {
-// Takes a string given, and interprets \n and friends
- char *End = Peek+strlen(Peek);
- while(*Peek != 0 && (Peek < End)) {
- // (Peek<End) so it doesn't crash when Peek accidently skips over the end
- *Poke++ = *Peek;
- if(*Peek == '\\') {
- Peek++;
- switch(*Peek) {
- case '\\': *(Poke-1) = '\\'; break; // Escaped '\'
- case 'R': *(Poke-1) = 0x16; break; // Reversed
- case 'i': *(Poke-1) = 0x1d; break; // Italic
- case '1': *(Poke-1) = 0x01; break; // for making bots do actions
- case 'u': *(Poke-1) = 0x1f; break; // Underline
- case 'b': *(Poke-1) = 0x02; break; // Bold
- case 'c': *(Poke-1) = 0x03; break; // Colored
- case 'p': *(Poke-1) = 0x0f; break; // Plain
- case 'a': *(Poke-1) = '\a'; break; // Bell
- case 'n': *(Poke-1) = '\n'; break; // Newline
- case 't': *(Poke-1) = '\t'; break; // Tab
- case 'r': *(Poke-1) = '\r'; break; // Carriage return
- case 'x': *(Poke-1) = strtol(Peek+1, &Peek, 16); break; // Read as hex
- case 'h': *(Poke-1) = 0x03; *(Poke++) = '0'; *(Poke++) = '1'; *(Poke++) = ','; *(Poke++) = '0'; *(Poke++) = '1'; break;
- case 'w': *(Poke-1) = 0x03; *(Poke++) = '0'; *(Poke++) = '0'; *(Poke++) = ','; *(Poke++) = '0'; *(Poke++) = '0'; break;
- default: *(Poke-1) = '?'; break; // Unrecognized
- }
- }
- Peek++;
- }
-
- *Poke = 0;
- return Poke;
-}
-
-// Given a list of words to choose from, Adj() selects one at random
-// Named because it was originally for randomly choosing adjectives
-static char *Adj(int Amount, char *Word, ...) {
- va_list vl;
- va_start(vl,Word);
- char *Chk = Word;
- int Which = rand2(Amount);
- while(Which){
- if(Chk == NULL) break;
- Which--;
- Chk=va_arg(vl,char*);
- }
- va_end(vl);
- return(Chk);
- return(NULL); // no matches
-}
-
-// add to this list if you want, but be sure to update the number in SomeSpecies()
-static char *RandomSpecies[] = {"fox","wolf","kangaroo","raccoon","deer","skunk","hamster","dingo","coyote","kitty","squirrel","bunny","rabbit","dragon","canine","feline","vulpine","pony","lemming","squirrel","otter","chakat","spacecat","sergal","porcupine","hedgehog","koala", NULL};
-static char *SomeSpecies(){return(RandomSpecies[rand2(27)]);}
-
-#if ENABLE_NSFW_CONTENT
-// * QNinja eyetwitches at the.... accuracy
-static void GenDavYiff(char *CmdBuf, const char *Victim) {
- strcpy(CmdBuf, "");
- if (Victim==NULL) return;
- if (!strcasecmp(Victim,"")) return;
- switch(rand()&7) {
- case 0: case 1: sprintf(CmdBuf, "running to %s", Victim); break;
- case 2: case 3: sprintf(CmdBuf, "jump on %s", Victim); break;
- case 4: case 5: sprintf(CmdBuf, "nestles %son %s", Adj(2, "", "tight "), Victim); break;
- case 6: case 7:
- sprintf(CmdBuf, "stops to %s %s", Adj(4,"hug","tickle","tickle","kiss"), Victim); break;
- }
- strcat(CmdBuf, " and");
- switch(rand()&7) {
- case 0: case 1: sprintf(CmdBuf, "%s hug %s", CmdBuf, Victim); break;
- case 2: case 3: sprintf(CmdBuf, "%s pets %s", CmdBuf, Victim); break;
- case 4: case 5: sprintf(CmdBuf, "%s kisses %s", CmdBuf, Victim); break;
- case 6: case 7: sprintf(CmdBuf, "%s tickles %s", CmdBuf, Victim); break;
- }
- strcat(CmdBuf, " then");
- switch(rand()&15) {
- case 0: case 1: sprintf(CmdBuf, "%s nibbles on the tits of %s", CmdBuf, Victim); break;
- case 2: sprintf(CmdBuf, "%s lick the tail hole of %s", CmdBuf, Victim); break;
- case 3: case 4: sprintf(CmdBuf, "%s give a big cookie to %s", CmdBuf, Victim); break;
- case 5: sprintf(CmdBuf, "%s give a big bouquet of red roses to %s", CmdBuf, Victim); break;
- case 6: sprintf(CmdBuf, "%s lick the muzzle of %s", CmdBuf, Victim); break;
- case 7: sprintf(CmdBuf, "%s give a red rose to %s", CmdBuf, Victim); break;
- case 8: sprintf(CmdBuf, "%s give a pizza to %s", CmdBuf, Victim); break;
- case 9: sprintf(CmdBuf, "%s goes on his knee and give a diamond ring to %s", CmdBuf, Victim); break;
- case 10: sprintf(CmdBuf, "%s kick the balls of %s to the moon", CmdBuf, Victim); break;
- case 11: sprintf(CmdBuf, "%s begins to crying", CmdBuf); break;
- case 12: sprintf(CmdBuf, "%s stroke the tits of %s", CmdBuf, Victim); break;
- case 13: sprintf(CmdBuf, "%s give a magic sword to %s", CmdBuf, Victim); break;
- case 14: sprintf(CmdBuf, "%s running away", CmdBuf); break;
- case 15: sprintf(CmdBuf, "%s sticks his finger in the cunt of %s", CmdBuf, Victim); break;
- }
-}
-
-static void DoDavYiff(char *Victim) {
- char Buffer[512]; int i;
- GenDavYiff(Buffer, Victim);
- switch(rand()&7) {
- case 0: case 1: break;
- case 2: case 3: strcat(Buffer, " ^ w ^");break;
- case 4: case 5: case 6: case 7:
- for(i=rand()%16;i;i--)
- strcat(Buffer, " <3");
- break;
- }
- for(i=0;Buffer[i];i++)
- Buffer[i]=tolower(Buffer[i]);
- hexchat_commandf(ph, "me %s", Buffer);
-}
-
-static int yiff_cb(char *word[], char *word_eol[], void *userdata) {
- // checking if null arguments were passed
- if (word[2]==NULL) return(HEXCHAT_EAT_ALL);
- if (!strcasecmp(word[2],"")) return(HEXCHAT_EAT_ALL);
-
- // alter the number if you add/take away yiffscript choices
- int MaxYiffScript = 44;
-
- int action = -1;
- int BillyMaysMode = 0;
-
- // fetch these however your IRC client does it
-// const char *MyNick = hexchat_get_info(ph,"nick");
- const char *Victim = word[2];
-
- char CommandBuf[2048]; // I'm sick and tired of buffer overflow crashing my IRC bot,
- char ChainBuffer[2048]; // so I'll just raise the buffers to stupid sizes.
- sprintf(CommandBuf, "fails to find any YiffScript actions that match id %i", action);
- strcpy(ChainBuffer, "");
-
- char *MySpecies=SomeSpecies();
- char *YourSpecies=SomeSpecies();
- char *ReplyWith = "me";
-
- int YiffChain = 1;
- int ActionSet = 0;
- char *Emoticon = Adj(8,"","","^w^","^ w ^","<3",":3","=^____^=","=^________^=");
- int Rainbows = 0;
- char *Conjoin = ", and then ";
-
- // scan through these however your IRC client does it
- int i;
- int ShuffleLevel = 0;
-
- char *HSTroll = NULL;
- for(i=3;word[i]!=NULL && strcasecmp(word[i],"");i++) {
- if(!strcasecmp(word[i],"-am")) // set action
- action = strtol(word[i+1],NULL,10);
- if(!strcasecmp(word[i],"-ms")) // set my species
- MySpecies = word[i+1];
- if(!strcasecmp(word[i],"-ys")) // set your species
- YourSpecies=word[i+1];
- if(!strcasecmp(word[i],"-hstroll"))
- HSTroll=word[i+1];
- if(!strcasecmp(word[i],"-bm") || !strcasecmp(word[i],"-allcaps"))
- BillyMaysMode = 1;
- if(!strcasecmp(word[i],"-altcaps"))
- BillyMaysMode = 2;
- if(!strcasecmp(word[i],"-randcaps"))
- BillyMaysMode = 3;
- if(!strcasecmp(word[i],"-snuggle")) {
- ActionSet = 1; MaxYiffScript = 10;}
- if(!strcasecmp(word[i],"-davyiff")) {
- ActionSet = 2;}
- if(!strcasecmp(word[i],"-fuk")) {
- ActionSet = 3; MaxYiffScript = 40;
- }
- if(!strcasecmp(word[i],"-list")) {
- ActionSet = 4;
- // no exploits plz
- if(strlen(word[i+1]) >= 30) return HEXCHAT_EAT_ALL;
- if(strchr(word[i+1], '.')) return HEXCHAT_EAT_ALL;
- if(strchr(word[i+1], '/')) return HEXCHAT_EAT_ALL;
- if(strchr(word[i+1], '\\')) return HEXCHAT_EAT_ALL;
- if(strcasecmp(word[i+1], CustomYiffName)) {
- strcpy(CustomYiffName, word[i+1]);
- if(CustomYiffBuffer) free(CustomYiffBuffer);
- char Buffer[260];
- sprintf(Buffer, "%s/Sparkles/yiff%s.txt", hexchat_get_info(ph, "xchatdirfs"), word[i+1]);
- CustomYiffBuffer = ReadTextFile(Buffer);
- if(!CustomYiffBuffer) {
- hexchat_printf(ph, "Could not open %s\n", Buffer);
- return HEXCHAT_EAT_ALL;
- }
- CustomYiffPointers[0] = CustomYiffBuffer;
- CustomYiffCount = 1;
- char *Poke = CustomYiffBuffer;
- while(1) {
- Poke = strchr(Poke+1, '\n');
- if(!Poke) break;
- if(Poke[-1] == '\r') Poke[-1] = 0;
- *Poke = 0;
- CustomYiffPointers[CustomYiffCount++] = Poke+1;
- }
- }
- MaxYiffScript = CustomYiffCount;
- }
- if(!strcasecmp(word[i],"-rainbow"))
- Rainbows=1;
- if(!strcasecmp(word[i],"-emote") || !strcasecmp(word[i],"-suffix"))
- Emoticon = word[i+1];
- if(!strcasecmp(word[i],"-conjoin"))
- Conjoin = word[i+1];
- if(!strcasecmp(word[i],"-vi"))
- Victim = word[i+1];
- if(!strcasecmp(word[i],"-bold"))
- strcat(ChainBuffer, "\2");
- if(!strcasecmp(word[i],"-italic"))
- strcat(ChainBuffer, "\x1d");
- if(!strcasecmp(word[i],"-underline"))
- strcat(ChainBuffer, "\x1f");
- if(!strcasecmp(word[i],"-inverse"))
- strcat(ChainBuffer, "\x16");
- if(!strcasecmp(word[i],"-prefix"))
- strcat(ChainBuffer, word[i+1]);
- if(!strcasecmp(word[i],"-say")) // use /say instead (so you can use cmdstack)
- ReplyWith = "say";
- if(!strcasecmp(word[i],"-shuffle"))
- ShuffleLevel=strtol(word[i+1],NULL,10);
- if(!strcasecmp(word[i],"-yc")) { // start a yiffchain!
- YiffChain=strtol(word[i+1],NULL,10)&3;
- // going too high crashes stuff with all the yiffiness so I'll cap it at 3
- }
- }
- if(action == -1) {
- do {
- action = rand2(MaxYiffScript);
- } while(action == LastYiff);
- }
- if(YiffChain != 1) Rainbows = 0;
- const char *ReplaceWith[] = {hexchat_get_info(ph, "nick"), Victim, MySpecies, YourSpecies, hexchat_get_info(ph, "channel")};
-
- if(YiffChain == 0) sprintf(ChainBuffer, "throws a pizza party and invites %s", Victim);
- for(;YiffChain;YiffChain--) { // really sloppy way of implementing yiffchains
- if(ActionSet == 0) {
- if (action == 0) sprintf(CommandBuf,"rubs %s's %s while groping at his crotch with his feet",Victim,Adj(3,"member","footpaws","knot"));
- if (action == 1) sprintf(CommandBuf,"grabs %s, twirls him around like a dancer and places a kiss on his lips, fondling his tailhole for a second so he can taste it later ",Victim);
- if (action == 2) sprintf(CommandBuf,"rubs %s's hard %s while reaching back for some extra tailhole fun",Victim,Adj(2,"knot","member"));
- if (action == 3) sprintf(CommandBuf,"snuggletackles %s and starts romping on top of %s",Victim, Adj(2, "him","her"));
- if (action == 4) sprintf(CommandBuf,"takes %s's %s %s into his maw and begins suckling like one would their mother's breast", Victim,Adj(8,"stiff","hard","long","tasty","thick","erect","throbbing","pulsing"),Adj(3,"rod","shaft","member"));
- if (action == 5) sprintf(CommandBuf,"puts his fingers on %s's mouth to shush him as he starts working his %s %s%s",Victim,Adj(2,"throbbing","pulsing"),YourSpecies,Adj(4,"hood"," member"," penis"," rod"));
- if (action == 6) sprintf(CommandBuf,"caresses %s's furry ballsac, inhaling %s's sweet musk through his nostrils, his %s starting to grow from all the sensations", Victim, Victim, Adj(2,"member","rod"));
- if (action == 7) sprintf(CommandBuf,"murrs, humping softly against %s's hand, twisting the tip of his finger in %s's %s", Victim, Victim, Adj(3,"butthole","tailhole","tailstar"));
- if (action == 8) sprintf(CommandBuf,"licks along %s's silky lips, taking %s's exposed %s%s and plays with the tip, rubbing the underside with his thumb slowly towards the tip", Victim, Victim, YourSpecies, Adj(3,"hood","hood"," member"));
- if (action == 9) sprintf(CommandBuf,"gets a firm grip on %s's hip as he thrusts his %shood deep within his tight and inexperienced %s, unexpectedly ramming his knot causing an orgasm of pain and pleasure for %s",Victim,MySpecies,Adj(2,"tailhole","tailstar"),Victim);
- if (action == 10){sprintf(CommandBuf,"emerges from his sheathe, his hard knot glistening in the moist air"); YiffChain++; }
- if (action == 11) sprintf(CommandBuf,"pokes a finger into %s's %s sheath, tasting the tip of his finger in excitement", Victim,Adj(2,"moist","wet"));
- if (action == 12) sprintf(CommandBuf,"%s %s %s all over %s",Adj(4,"sprays","blasts","jets","squirts"),Adj(8,"hot","sticky","slick","warm","delicious","yummy","tasty","illegal"),Adj(4,"sperm","seed","cum","semen"),Victim);
- if (action == 13) sprintf(CommandBuf,"clenches his firm, supple buttocks around the %s head of %s's %s%s", Adj(4,"thick","hard","slick","wet"), Victim, YourSpecies, Adj(4,"cock","hood"," member", "dick"));
- if (action == 14) sprintf(CommandBuf,"runs his %s along %s's soft and slender thighs, running up to his %s %s%s ",Adj(2,"fingers","paws"), Victim, Adj(3,"thick and juicy","partially erect","hard, throbbing"), YourSpecies, Adj(4,"dick", "hood","cock"," member"));
- if (action == 15) sprintf(CommandBuf,"wraps his hands around %s's back, moving downward while kissing along his soft yet sturdy chest and abs",Victim);
- if (action == 16) sprintf(CommandBuf,"runs his %s through %s's silky fur, rubbing his %s to get him excited",Adj(2,"fingers","paws"),Victim,Adj(2,"dick","ear"));
- if (action == 17) sprintf(CommandBuf,"slips his tongue into %s's moist sheath, taking in all the flavors of his %s musk",Victim,YourSpecies);
- if (action == 18) sprintf(CommandBuf,"takes %s's entire %s length into his mouth, leaking precum in excitement",Victim, YourSpecies);
- if (action == 19) sprintf(CommandBuf,"cuddles close to %s, his excitement poking %s from behind",Victim,Victim);
- if (action == 20) sprintf(CommandBuf,"pushes down onto %s's lap with his weight, thrusting %s's knot deep within his %s",Victim,Victim, Adj(2,"tailstar","tailhole"));
- if (action == 21) sprintf(CommandBuf,"rubs his petite bottom on %s's well-endowed %s-cock",word[2],YourSpecies);
- if (action == 22) sprintf(CommandBuf,"murrs as he slides his paw over %s's %s %s %s",Victim, Adj(9,"throbbing","huge","gigantic","enormous","freaking huge", "ridiculously sized", "illegally sized","massive","itty bitty"), YourSpecies,Adj(4,"cock","penis","length","member"));
- if (action == 23) sprintf(CommandBuf,"pushes down on %s's rock hard %s%s with his palm, sliding around with his precum", Victim, YourSpecies,Adj(4,"cock","hood"," member"," rod"));
- if (action == 24) sprintf(CommandBuf,"takes %s's entire %s length into his mouth, gagging as he swallows the knot", Victim, YourSpecies);
- if (action == 25) sprintf(CommandBuf,"slides %s fingers into %s's %s %s while fondling hir sheathe",Adj(4,"two","three","four","over 9000"),Victim,Adj(4,"juicy","tight","erect","wet"),Adj(3,"pussy","vagina","cunt"));
- if (action == 26) sprintf(CommandBuf,"tries to go down on %s's sweet %s-gina, but is pushed back by hir throbbing %s",Victim,YourSpecies,Adj(2,"member","rod"));
- if (action == 27) sprintf(CommandBuf,"takes a painfully hard grip on %s's %s%s from behind and %s his knot right up %s %s %s", Victim, YourSpecies, Adj(3,"hood","cock"," member"), Adj(5,"jams","forces","shoves","pushes","slams"), Adj(3,"his","her","hir"), Adj(2,"virgin","tight"), Adj(2,"tailhole","tailstar"));
- if (action == 28) sprintf(CommandBuf,"slides his throbbing %s%s along %s's luscious %s breasts, leaving a trail of precum along %s sweat-glistened chest", MySpecies, Adj(3,"hood","cock"," member"), Victim, YourSpecies, Adj(3,"her","his","hir"));
- if (action == 29) sprintf(CommandBuf,"puts %s muzzle between %s's smooth thighs and starts lapping at %s %s %sclit", Adj(3,"her","his","hir"), Victim, Adj(2,"her","hir"), Adj(3,"slippery","sensitive","erect"), YourSpecies);
- if (action == 30) sprintf(CommandBuf,"gently slides his paw over %s's right foot while gliding a finger over his tailhole in anticipation",Victim);
- if (action == 31){sprintf(CommandBuf,"drags a foxy claw across the ridges of %s's circumcision scar",Victim); YiffChain++; }
- if (action == 32) sprintf(CommandBuf,"%s a huge creamy yiffload all over %s", Adj(4,"busts","blasts","shoots","jets"), Victim);
- if (action == 33) sprintf(CommandBuf,"takes %s and ravages them from behind with a huge %s boner.",word[2],MySpecies);
- if (action == 34) sprintf(CommandBuf,"aims and shoots, but misses %s's mouth, leaving a mess of jizz dripping down %s's chin!",Victim,Victim);
- if (action == 35) sprintf(CommandBuf,"%s gallons of %s jizz all over %s", Adj(2,"blasts","pumps"), MySpecies, word[2]);
- if (action == 36) sprintf(CommandBuf,"howls with pleasure as %s pulls his knot out of his hole, stretching it to an obscene size before a loud \"POP\" is heard and %s's %sjuice cascades down his already drenched thighs",word[2],Victim,YourSpecies);
- if (action == 37) sprintf(CommandBuf,"nibbles softly on the carrot protruding from %s's juicy hole as %s's fluffy bunnytail tickles %s face",Victim,Victim, Adj(3,"his","her", "hir"));
- if (action == 39) sprintf(CommandBuf,"tailwavies~ at %s, showing him his engorged, dripping %s%s",Victim, MySpecies, Adj(3,"hood","cock"," member"));
- if (action == 40) sprintf(CommandBuf,"critches the inside of %s's rosebud with his entire hand while lapping up the fountain of %s butter escaping from %s's engorged member",Victim,YourSpecies,Victim);
- if (action == 41) sprintf(CommandBuf,"rubs his paws through %s's %sfuzz, sticking his muzzle under the %s's tail giving %s %s a nice warm lick", Victim, Adj(3,"butt","butt","ass"), YourSpecies, Adj(2,"his","her"), Adj(2,"tailstar","tailhole"));
- if (action == 42) sprintf(CommandBuf,"goes apeshit and jumps on %s with a pulsing hard cock",Victim);
- if (action == 43) sprintf(CommandBuf,"grabs %s and kisses %s on the lips deeply, slowly starting to make out with the %s", Victim, Adj(2,"him","her"), YourSpecies);
- }
- if(ActionSet == 1) {
- if (action == 0) sprintf(CommandBuf,"looks at %s, charges to them, jumps and snuggles!", Victim);
- if (action == 1) sprintf(CommandBuf,"appears behind %s and wraps his arms around %s's midsection playfully!", Victim,Victim);
- if (action == 2) sprintf(CommandBuf,"glomps %s, nuzzling him!", Victim);
- if (action == 3) sprintf(CommandBuf,"hugs %s tightly, enjoying his warmth", Victim);
- if (action == 4) sprintf(CommandBuf,"tackles %s to the ground in a hug, nuzzling him~", Victim);
- if (action == 5) sprintf(CommandBuf,"snuggles with %s, murring~", Victim);
- if (action == 6) sprintf(CommandBuf,"hugs %s, giving them a small kiss on the cheek", Victim);
- if (action == 7) sprintf(CommandBuf,"tacklesnugs %s!!", Victim);
- if (action == 8) sprintf(CommandBuf,"nuzzles %s, murring and smiling~", Victim);
- if (action == 9) sprintf(CommandBuf,"playfully tickles %s, huggling them afterwards~", Victim);
- }
- if(ActionSet == 2) {
- GenDavYiff(CommandBuf, Victim);
- }
- if(ActionSet == 3) {
- if (action == 0) sprintf(CommandBuf,"toch %s inapritly", Victim);
- if (action == 1) sprintf(CommandBuf,"lok at %s but!", Victim);
- if (action == 2) sprintf(CommandBuf,"chukl @ %s", Victim);
- if (action == 3) sprintf(CommandBuf,"sap %s on the but", Victim);
- if (action == 4) sprintf(CommandBuf,"get nakd 4 %s 2 wach", Victim);
- if (action == 5) sprintf(CommandBuf,"laf @ %s's smal dik! lol!", Victim);
- if (action == 6) sprintf(CommandBuf,"suk %s dik! omg big!", Victim);
- if (action == 7) sprintf(CommandBuf,"lik her bobs & let %s watch!!!!!!", Victim);
- if (action == 8) sprintf(CommandBuf,"msg her pus & com al ovr %s! sary!!!", Victim);
- if (action == 9) sprintf(CommandBuf,"kis %s width pashin", Victim);
- if (action == 10) sprintf(CommandBuf,"rub %s dik til it skwart! yam!", Victim);
- if (action == 11) sprintf(CommandBuf,"cal %s a jek!", Victim);
- if (action == 12) sprintf(CommandBuf,"finghersef ten shuv figner up %s but!", Victim);
- if (action == 13) sprintf(CommandBuf,"frat on %s dik", Victim);
- if (action == 14) sprintf(CommandBuf,"jugl %s bals", Victim);
- if (action == 15) sprintf(CommandBuf,"chap %s hed of", Victim);
- if (action == 16) sprintf(CommandBuf,"cal %s a uqly nager! stop swimin!", Victim);
- if (action == 17) sprintf(CommandBuf,"pok %s jus 4 fun :D!", Victim);
- if (action == 18) sprintf(CommandBuf,"tak cloths off & let %s tak pics", Victim);
- if (action == 19) sprintf(CommandBuf,"get nakd & clim in2 %s's bed & suck %s dik undie teh covars", Victim, Victim);
- if (action == 20) sprintf(CommandBuf,"pop in %s tolet. it stink new!", Victim);
- if (action == 21) sprintf(CommandBuf,"tint %s by slap hre but", Victim);
- if (action == 22) sprintf(CommandBuf,"let %s stik his dik in witey puss. omg ur so bag!", Victim);
- if (action == 23) sprintf(CommandBuf,"por iskreem don %s pant", Victim);
- if (action == 24) sprintf(CommandBuf,"sit on %s dik & jigel her bobs", Victim);
- if (action == 25) sprintf(CommandBuf,"pop out of %s clost & shov %s dik up her but SUPRIS BUTSEKS", Victim, Victim);
- if (action == 26) sprintf(CommandBuf,"takl & hug %s", Victim);
- if (action == 27) sprintf(CommandBuf,"stik dik in %s boootie! wowh dat tite!", Victim);
- if (action == 28) sprintf(CommandBuf,"ripe %s in shawer", Victim);
- if (action == 29) sprintf(CommandBuf,"smak %s tity arond&rond", Victim);
- if (action == 30) sprintf(CommandBuf,"pul %s nepal tal melk cum out then i dranc melk! yum!", Victim);
- if (action == 31) sprintf(CommandBuf,"rip of %s close so %s nood wow %s youre prity..prity UGLY lol!!!!!", Victim, Victim, Victim);
- if (action == 32) sprintf(CommandBuf,"com in %s then pul out & lik joos. wowh test lek apl!", Victim);
- if (action == 33) sprintf(CommandBuf,"salp %s in fayc wit dik & P in aye, wops!", Victim);
- if (action == 34) sprintf(CommandBuf,"skwart don %s throught. r u stil thurst?", Victim);
- if (action == 35) sprintf(CommandBuf,"sho of dik 2 %s! dont laff @ me u jek!!!", Victim);
- if (action == 36) sprintf(CommandBuf,"dra pic of hishelf on %s bely wit prekom", Victim);
- if (action == 37) sprintf(CommandBuf,"dres dik up in tophat & shuv it up %s puss", Victim);
- if (action == 38) sprintf(CommandBuf,"rip of %s nepals & glu on hes bals", Victim);
- if (action == 39) sprintf(CommandBuf,"stik dik in %s ear & P! hehahe u got swimer year!", Victim);
- }
- if(ActionSet == 4) {
- *CommandBuf = 0; // probably don't need this
- TextInterpolate(CommandBuf, CustomYiffPointers[action], '%', "mysSc", ReplaceWith);
- }
- if(NULL != strstr(CommandBuf,"fails to")) {
- YiffChain++;
- action = rand2(MaxYiffScript); // pick a new yiff action
- continue;
- }
- else {
- strcat(ChainBuffer, CommandBuf);
- if(YiffChain != 1) strcat(ChainBuffer, Conjoin); // "and after that"
- }
-/*
-<NovaYoshi> Note the "and then"
-<Kyurel> "and then"
-<Kyurel> is that the best you can come up with?
-<NovaYoshi> yes
-<Kyurel> you should have a whole bunch of conjoining strings
-<Kyurel> so that it's not like
-<Kyurel> "and then... and then... and then... and then"
-<Kyurel> maybe
-<Kyurel> "next... then... thenceforth... finally..."
-*/
- action = rand2(MaxYiffScript); // pick a new yiff action
- }
- sprintf(CommandBuf, "%s %s", ChainBuffer, Emoticon); // append a smiley
-
- if(BillyMaysMode==1 || !strcasecmp(Victim,"Billy Mays") || !strcasecmp(Victim,"BillyMays")) {
- for(i=0;CommandBuf[i];i++)
- CommandBuf[i]=toupper(CommandBuf[i]);
- }
- if(BillyMaysMode==2) {
- for(i=0;CommandBuf[i];i++)
- if(i&1)
- CommandBuf[i]=toupper(CommandBuf[i]);
- else
- CommandBuf[i]=tolower(CommandBuf[i]);
- }
- if(BillyMaysMode==3) {
- for(i=0;CommandBuf[i];i++)
- if(rand()&1)
- CommandBuf[i]=toupper(CommandBuf[i]);
- else
- CommandBuf[i]=tolower(CommandBuf[i]);
- }
- if(Rainbows) {
- int j;
- char *Poke = ChainBuffer;
- for(i=0,j=0;CommandBuf[i];i++) {
- if(isgraph2(CommandBuf[i]) && !(i&3)) {
- *(Poke++) = 0x03;
- *(Poke++) = Rainbow[j][0];
- *(Poke++) = Rainbow[j++][1];
- if(j == 5) j = 0;
- }
- *(Poke++) = CommandBuf[i];
- }
- *Poke = 0;
- strcpy(CommandBuf,ChainBuffer);
- }
-
- LastYiff=action;
-
- if(ShuffleLevel > 0) {
- ShuffleChars(ChainBuffer, CommandBuf, ShuffleLevel,0);
- strcpy(CommandBuf, ChainBuffer);
- }
-
- if(HSTroll == NULL)
- hexchat_commandf(ph, "%s %s", ReplyWith, CommandBuf);
- else {
- hexchat_commandf(ph, "me %s", TrollFilter(ChainBuffer, CommandBuf, HSTroll));
- }
- return HEXCHAT_EAT_ALL; /* eat this command so xchat and other plugins can't process it */
-}
-#endif
-
-static int Activity2Focus_cb(char *word[], void *userdata) {
- NeedSpaceBetweenX5Font = 0;
- if(Activity2Focus)
- hexchat_command(ph,"gui focus");
- return HEXCHAT_EAT_NONE;
-}
-
-static int RawServer_cb(char *word[], char *word_eol[], void *userdata) {
- // ERROR :Closing Link: Nick[host] services.anthrochat.net (NickServ (GHOST command used by Nick2))
- if(!DisableAutoGhostChainBreak && !strcasecmp(word[1], "ERROR") && NULL != strstr(word[3], "GHOST"))
- GhostDelayTime = (unsigned)time(NULL);
-
- if(GrabbingTopic && !strcasecmp(word[2],"332")) {
- char *Copy = word_eol[5];
- if(*Copy == ':')
- Copy++;
- hexchat_commandf(ph, "settext /topic %s", Copy);
- hexchat_commandf(ph, "setcursor 7");
- GrabbingTopic = 0;
- return HEXCHAT_EAT_ALL;
- }
-
- if(DisablePlusJFix || !RejoinKick)
- return HEXCHAT_EAT_NONE;
- if(!strcasecmp(word[2],"495")) { // "can't join, because +J"
- char *Channel = word[4];
- if(NULL!=strstr(word_eol[6], "after being kicked to rejoin")) {
- char *N = strstr(word_eol[6], "must wait ");
- if(N != NULL) {
- int Seconds = strtol(N+10,NULL,10);
- hexchat_commandf(ph,"spark spawnquiet %i.4 s join %s", Seconds, Channel);
- }
- }
- }
- return HEXCHAT_EAT_NONE;
-}
-
-static const char *SafeGet(const char *Orig, char *Substitute) {
-// For functions that freak out when given NULL instead of a string
- if(Orig != NULL) return(Orig);
- if(Substitute != NULL) return(Substitute);
- return("(null)");
-}
-
-static char *Backwords(const char *Inp, char *Out) {
- int i, temp, Len; char *Seek = Out, *Fix;
-
- for(i=strlen(Inp)-1;i!=-1;i--)
- *(Seek++) = Inp[i];
- *Seek = 0;
-
- for(Seek = Out;;Seek++) {
- if((Seek!=Out) && ((*Seek == ' '||!*Seek) && Seek[-1]!=' ')) {
- for(Fix = Seek;Fix != Out && Fix[-1] != ' ';Fix--);
- if(NULL!=strchr(Fix, ' ')) Len = strchr(Fix, ' ') - Fix;
- else Len = strlen(Fix);
- for(i=0;i<=(Len>>1)-1;i++) {
- temp = Fix[i];
- Fix[i] = Fix[Len-1-i];
- Fix[Len-1-i] = temp;
- }
- }
- if(!*Seek)
- break;
- }
- return Out;
-}
-
-static int WhatNetwork_cb(char *word[], void *userdata) {
-// Just in case filenames get damaged, I can still see from my logs what network they're from
- if(DisableShowNetworkOnJoin) return HEXCHAT_EAT_NONE;
- if(ForceUTF8) {
- if(strcasecmp(hexchat_get_info(ph, "charset"), "UTF-8") && strcasecmp(hexchat_get_info(ph, "charset"), "UTF8"))
- hexchat_command(ph, "charset UTF-8");
- }
- hexchat_printf(ph,"( Network is \"%s\" , \"%s\" )\n", //SparklesUser,
- SafeGet(hexchat_get_info(ph, "network"),"Not found"),
- SafeGet(hexchat_get_info(ph, "server"),NULL));
- return HEXCHAT_EAT_NONE;
-}
-
-static int TrapActionPost_cb(char *word[], char *word_eol[], void *userdata) {
- if(UseOneSayHook) {
- if(MeHook != NULL)
- hexchat_unhook(ph, MeHook);
- hexchat_commandf(ph, "%s %s", OneSayHook, word_eol[2]);
- MeHook = hexchat_hook_command(ph, "me", HEXCHAT_PRI_NORM, TrapActionPost_cb, NULL, 0);
- return HEXCHAT_EAT_ALL;
- }
- else if(CmdStackPtr != NULL) {
- char Buffer[512];
- strcpy(Buffer, CmdStackPtr);
- char *A = strstr(Buffer, "||");
- if(A) {
- *A = 0;
- CmdStackPtr=A+2;
- char *OldPtr = CmdStackPtr;
- hexchat_commandf(ph, "%s %s", Buffer, word_eol[2]);
- if(OldPtr == CmdStackPtr) {
- hexchat_printf(ph, "\"%s\" in cmdstack did not result in /say", Buffer);
- CmdStackPtr = NULL;
- }
- return HEXCHAT_EAT_ALL;
- }
- else {
- CmdStackPtr=NULL;
- hexchat_commandf(ph, "%s %s", Buffer, word_eol[1]);
- return HEXCHAT_EAT_ALL;
- }
- }
- if(strcasecmp(MeHookCommand,"")) {
- if(MeHook != NULL)
- hexchat_unhook(ph, MeHook);
- hexchat_commandf(ph, "%s %s", MeHookCommand, word_eol[2]);
- MeHook = hexchat_hook_command(ph, "me", HEXCHAT_PRI_NORM, TrapActionPost_cb, NULL, 0);
- return HEXCHAT_EAT_ALL;
- }
- if(IsPesterchum() && !DisablePesterchum) {
- hexchat_commandf(ph, "spark normalsay /me %s", word_eol[2]);
- return HEXCHAT_EAT_ALL;
- }
- return HEXCHAT_EAT_NONE;
-}
-
-static int Close_cb(char *word[], void *userdata) {
- strcpy(ClosedList[2], ClosedList[1]);
- strcpy(ClosedList[1], ClosedList[0]);
- strlcpy(ClosedList[0], hexchat_get_info(ph, "channel"), 64);
- return HEXCHAT_EAT_NONE;
-}
-
-static int TrapNormalPost_cb(char *word[], char *word_eol[], void *userdata) {
- if(UseOneSayHook) {
- if(SayHook != NULL)
- hexchat_unhook(ph, SayHook);
- hexchat_commandf(ph, "%s %s", OneSayHook, word_eol[1]);
- SayHook = hexchat_hook_command(ph, "", HEXCHAT_PRI_NORM, TrapNormalPost_cb, NULL, 0);
- return HEXCHAT_EAT_ALL;
- }
- else if(CmdStackPtr != NULL) {
- char Buffer[512];
- strcpy(Buffer, CmdStackPtr);
- char *A = strstr(Buffer, "||");
- if(A) {
- *A = 0;
- CmdStackPtr=A+2;
- char *OldPtr = CmdStackPtr;
- hexchat_commandf(ph, "%s %s", Buffer, word_eol[1]);
- if(OldPtr == CmdStackPtr) {
- hexchat_printf(ph, "\"%s\" in cmdstack did not result in /say", Buffer);
- CmdStackPtr = NULL;
- }
- return HEXCHAT_EAT_ALL;
- }
- else {
- CmdStackPtr=NULL;
- hexchat_commandf(ph, "%s %s", Buffer, word_eol[1]);
- return HEXCHAT_EAT_ALL;
- }
- }
- else {
- if(IsPesterchum() && IsChannel() && *PesterchumChanHook && !DisablePesterchum) {
- if(SayHook != NULL)
- hexchat_unhook(ph, SayHook);
- hexchat_commandf(ph, "%s %s", PesterchumChanHook, word_eol[1]);
- SayHook = hexchat_hook_command(ph, "", HEXCHAT_PRI_NORM, TrapNormalPost_cb, NULL, 0);
- return HEXCHAT_EAT_ALL;
- }
- if(strcasecmp(SayHookCommand,"")) {
- if(SayHook != NULL)
- hexchat_unhook(ph, SayHook);
- if(SayHookSpace)
- hexchat_commandf(ph, "%s %s", SayHookCommand, word_eol[1]);
- else
- hexchat_commandf(ph, "%s%s", SayHookCommand, word_eol[1]);
- SayHook = hexchat_hook_command(ph, "", HEXCHAT_PRI_NORM, TrapNormalPost_cb, NULL, 0);
- return HEXCHAT_EAT_ALL;
- }
- return HEXCHAT_EAT_NONE;
- }
- return HEXCHAT_EAT_NONE;
-}
-
-static void ListOnEvent(char *Buffer, struct OnEventInfo *Info) {
- int j;
- *Buffer = 0;
- sprintf(Buffer, "%i", Info->Slot);
- if(Info->Flags ^ OEF_ENABLED) {
- if(!(Info->Flags) & OEF_ENABLED)
- strcat(Buffer, "d");
- if(Info->Flags & OEF_TEMPORARY)
- strcat(Buffer, "t");
- if(Info->Flags & OEF_SAVE)
- strcat(Buffer, "s");
- }
- strcat(Buffer, " \"");
- strcat(Buffer, Info->EventName);
- strcat(Buffer, "\" ");
- for(j=0;j<10;j++)
- if(Info->Match[j][0]) {
- strcat(Buffer, "\"");
- strcat(Buffer, Info->Match[j]);
- strcat(Buffer, "\" ");
- }
- strcat(Buffer, Info->Response);
-}
-
-static int AsyncExec(char *Command) {
-//shamelessy taken from hexchat's exec plugin
-#ifdef _WIN32
- STARTUPINFO sInfo;
- PROCESS_INFORMATION pInfo;
- ZeroMemory(&sInfo, sizeof (sInfo));
- ZeroMemory(&pInfo, sizeof (pInfo));
- sInfo.cb = sizeof(sInfo);
- sInfo.dwFlags = STARTF_USESTDHANDLES;
- sInfo.hStdInput = NULL;
- sInfo.hStdOutput = NULL;
- sInfo.hStdError = NULL;
- char commandLine[1024];
- sprintf(commandLine, "cmd.exe /c %s", Command);
- CreateProcess(0, commandLine, 0, 0, TRUE, NORMAL_PRIORITY_CLASS | CREATE_NO_WINDOW, 0, 0, &sInfo, &pInfo);
- return 1;
-#else
- hexchat_printf(ph,"AsyncExec() not ported to non-Windows platforms yet\n");
- return 0;
-#endif
-}
-static int Spark_cb(char *word[], char *word_eol[], void *userdata) {
- char Buffer[2048]; int i=0, j=0, k=0;
- int WasValid = 0;
- if(!strcasecmp(word[2],"sprintf") || !strcasecmp(word[2],"slashf")) {
- if(word[3] != NULL) {
- sparkles_text_unescape(Buffer, word_eol[3]);
- hexchat_commandf(ph,"%s", Buffer);
- }
- WasValid = 1;
- }
-
- if(!strcasecmp(word[2],"saveprefs")) { // save preferences back to the ini
- WasValid = 1;
- CreateDirectoriesForPath(ConfigFilePath);
- FILE *Output = fopen(ConfigFilePath,"w");
- if(!Output) {
- hexchat_print(ph, "Can't open preferences file for writing\n");
- return HEXCHAT_EAT_ALL;
- }
- int i;
- const char *LastGroup = "";
- for(i=0;ConfigOptions[i].Group;i++) {
- if(strcmp(LastGroup, ConfigOptions[i].Group)) {
- if(*LastGroup)
- fprintf(Output, "\n");
- fprintf(Output, "[%s]\n", ConfigOptions[i].Group);
- }
- LastGroup = ConfigOptions[i].Group;
-
- if(ConfigOptions[i].Type == CONFIG_STRING) {
- fprintf(Output, "%s=%s\n", ConfigOptions[i].Item, (char*)ConfigOptions[i].Data);
- } else if(ConfigOptions[i].Type == CONFIG_BOOLEAN) {
- fprintf(Output, "%s=%s\n", ConfigOptions[i].Item, (*(int*)ConfigOptions[i].Data)?"yes":"no");
- } else {
- fprintf(Output, "%s=%i\n", ConfigOptions[i].Item, *(int*)ConfigOptions[i].Data);
- }
- }
- fprintf(Output, "\n[OnEventList]\n");
- for(i=0;i<ONEVENTS_SIZE;i++)
- if(OnEventInfos[i] && OnEventInfos[i]->Flags & OEF_SAVE) {
- ListOnEvent(Buffer, OnEventInfos[i]);
- fprintf(Output, "%i=%s\n", i, Buffer);
- }
- fclose(Output);
- hexchat_print(ph, "Saved Sparkles preferences\n");
- }
-
- if(!strcasecmp(word[2],"crami")) { // cram into the input box
- WasValid = 1;
- hexchat_commandf(ph, "spark onesayhook settext cram %s", word_eol[3]);
- }
-
- if(!strcasecmp(word[2],"cram")) { // cram multiple posts into one
- WasValid = 1;
- int Mode = word[3]!=NULL && !strcasecmp(word[3],"noslash");
- const char *Peek = hexchat_get_info(ph, "inputbox");
- char *Poke = Buffer;
- const char *End = Peek+strlen(Peek);
- while(*Peek) {
- i = *(Peek++);
- if(Mode==0 && (i=='\n' || i=='\r')) {
- *(Poke++) = ' ';
- *(Poke++) = '\\';
- i=' ';
- while(*Peek == '\n' || *Peek == '\r' || *Peek == ' ')
- Peek++;
- }
- if(Mode==1 && (i=='\n' || i=='\r')) {
- while(*Peek == '\n' || *Peek == '\r' || *Peek == ' ')
- Peek++;
- if(Peek > End) break;
- continue;
- }
- *(Poke++) = i;
- if(Peek > End) break;
- }
- *Poke = 0;
- hexchat_commandf(ph, "say %s\n", Buffer);
- }
-
- if(!strcasecmp(word[2],"mathaddi")) {
- WasValid = 1;
- for(i=3;*word[i];i++)
- j+=strtol(word[i], NULL, 10);
- hexchat_commandf(ph, "settext %i", j);
- }
-
- if(!strcasecmp(word[2],"mathmuli")) {
- WasValid = 1;
- j=1;
- for(i=3;*word[i];i++)
- j*=strtol(word[i], NULL, 10);
- hexchat_commandf(ph, "settext %i", j);
- }
-
- if(!strcasecmp(word[2],"silentset")) {
- WasValid = 1;
- INIConfigHandler(word[3], word[4], word_eol[5]);
- }
- if(!strcasecmp(word[2],"set")) {
- WasValid = 1;
- hexchat_printf(ph, "Setting %s::%s to %s", word[3], word[4], word_eol[5]);
- INIConfigHandler(word[3], word[4], word_eol[5]);
- }
- if(!strcasecmp(word[2],"rehash")) {
- WasValid = 1;
- sprintf(Buffer, ConfigFilePath, hexchat_get_info(ph, "xchatdirfs"));
- ParseINI(fopen(Buffer,"rb"), INIConfigHandler);
- }
- if(!strcasecmp(word[2],"editconfig")) {
- WasValid = 1;
- hexchat_commandf(ph,"spark aexec %s %s", TextEditor, ConfigFilePath);
- }
-
- if(!strcasecmp(word[2],"aexec")||!strcasecmp(word[2],"asyncexec")) {
- WasValid = 1;
- AsyncExec(word_eol[3]);
- }
- if(!strcasecmp(word[2],"openlogs")) {
- WasValid = 1;
- const char *Chan = hexchat_get_info(ph, "channel");
- const char *Network = hexchat_get_info(ph, "network");
- const char *Server = SafeGet(hexchat_get_info(ph, "server"), NULL);
- if(strcasecmp(word[3],"")) {
- Chan = word[3];
- if(strcasecmp(word[4],"")) Network = word[4];
- }
- char LogPath[100];
- const char *LogMask;
- hexchat_get_prefs(ph, "irc_logmask", &LogMask, NULL);
- const char *ReplaceWith[] = {Network, Chan, Server};
- TextInterpolate(LogPath, LogMask, '%', "ncs", ReplaceWith);
- #ifdef HEXCHAT_PLUGIN_H
- sprintf(Buffer, "%s/logs/%s", hexchat_get_info(ph, "xchatdirfs"), LogPath);
- #else
- sprintf(Buffer, "%s/xchatlogs/%s", hexchat_get_info(ph, "xchatdirfs"), LogPath);
- #endif
- hexchat_commandf(ph,"spark aexec %s %s\n", TextEditor, Buffer);
- }
-
- if(!strcasecmp(word[2],"repeatstring")) {
- WasValid = 1;
- *Buffer = 0;
- j = strtol(word[3],NULL,10);
- for(i=0;i<j;i++)
- strcat(Buffer, word_eol[4]);
- hexchat_commandf(ph, "say %s", Buffer);
- }
- if(!strcasecmp(word[2],"useinputbox")) {
- WasValid = 1;
- hexchat_commandf(ph, "%s %s", word_eol[3], SafeGet(hexchat_get_info(ph, "inputbox"),NULL));
- }
- if(!strcasecmp(word[2],"sayinfo")) {
- WasValid = 1;
- hexchat_commandf(ph, "say %s", SafeGet(hexchat_get_info(ph, word[3]),NULL));
- }
- if(!strcasecmp(word[2],"sprintfi") || !strcasecmp(word[2],"slashfi")) { // "spark slashf settext" shortcut
- WasValid = 1;
- hexchat_commandf(ph,"spark sprintf settext %s", SafeGet(word_eol[3],""));
- }
- if(!strcasecmp(word[2],"sprintfs") || !strcasecmp(word[2],"slashfs")) { // "spark slashf say" shortcut
- WasValid = 1;
- hexchat_commandf(ph,"spark sprintf say %s", SafeGet(word_eol[3],""));
- }
- if(!strcasecmp(word[2],"sprintfm") || !strcasecmp(word[2],"slashfm")) { // "spark slashf me" shortcut
- WasValid = 1;
- hexchat_commandf(ph,"spark sprintf me %s", SafeGet(word_eol[3],""));
- }
- if(!strcasecmp(word[2],"driving")) {
- WasValid = 1;
- hexchat_commandf(ph,"say driving %i miles to %s's house %s", rand2(1000), word[3], word_eol[4]);
- }
- if(!strcasecmp(word[2],"drivingaway")) {
- WasValid = 1;
- hexchat_commandf(ph,"say driving %i miles away from %s's house %s", rand2(1000), word[3], word_eol[4]);
- }
- if(!strcasecmp(word[2],"ghost2")) { // passwordless ghost with auto reclaim
- WasValid = 1;
- hexchat_commandf(ph,"ns ghost %s %s", word[3], SafeGet(hexchat_get_info(ph, "nickserv"),""));
- AutoReclaimNick = 1;
- strcpy(GhostReclaimNick, word[3]);
- hexchat_commandf(ph,"spark spawnquiet 3 s nick %s", word[3]);
- }
- if(!strcasecmp(word[2],"ghost") && (NULL!=hexchat_get_info(ph, "nickserv"))) { // passwordless ghost
- WasValid = 1;
- hexchat_commandf(ph,"ns ghost %s %s", word[3], SafeGet(hexchat_get_info(ph, "nickserv"),""));
- }
- if(!strcasecmp(word[2],"release") && (NULL!=hexchat_get_info(ph, "nickserv"))) { // passwordless release
- WasValid = 1;
- hexchat_commandf(ph,"ns release %s %s", word[3], SafeGet(hexchat_get_info(ph, "nickserv"),""));
- }
- if(!strcasecmp(word[2],"ident") && (NULL!=hexchat_get_info(ph, "nickserv"))) { // passwordless identify
- WasValid = 1;
- hexchat_commandf(ph,"ns identify %s", SafeGet(hexchat_get_info(ph, "nickserv"),""));
- }
- if(!strcasecmp(word[2],"recover") && (NULL!=hexchat_get_info(ph, "nickserv"))) { // passwordless recover
- WasValid = 1;
- hexchat_commandf(ph,"ns recover %s", SafeGet(hexchat_get_info(ph, "nickserv"),""));
- }
-#if ENABLE_NSFW_CONTENT
- if(!strcasecmp(word[2],"davyiff")) { // dav_the_fox yiff
- WasValid = 1;
- DoDavYiff(word[3]);
- }
-#endif
- if(!strcasecmp(word[2],"35font")) {
- WasValid = 1;
- Print35Font(word_eol[4], word[3]);
- }
- if(!strcasecmp(word[2],"x5font")) {
- WasValid = 1;
- PrintX5Font(word_eol[4], word[3]);
- }
- if(!strcasecmp(word[2],"bigrainbow")) {
- WasValid = 1;
- hexchat_commandf(ph, "spark x5font @rr01 %s", word_eol[3]);
- }
- if(!strcasecmp(word[2],"bigtext")) {
- WasValid = 1;
- hexchat_commandf(ph, "spark x5font @0100 %s", word_eol[3]);
- }
-
- if(!strcasecmp(word[2],"normalsay")) {
- WasValid = 1;
- if(SayHook != NULL) {
- hexchat_unhook(ph, SayHook);
- hexchat_commandf(ph, "say %s", word_eol[3]);
- SayHook = hexchat_hook_command(ph, "", HEXCHAT_PRI_NORM, TrapNormalPost_cb, NULL, 0);
- }
- else
- hexchat_commandf(ph, "say %s", word_eol[3]);
- }
- if(!strcasecmp(word[2],"normalme")) {
- WasValid = 1;
- if(MeHook != NULL) {
- hexchat_unhook(ph, MeHook);
- hexchat_commandf(ph, "me %s", word_eol[3]);
- MeHook = hexchat_hook_command(ph, "me", HEXCHAT_PRI_NORM, TrapActionPost_cb, NULL, 0);
- }
- else
- hexchat_commandf(ph, "me %s", word_eol[3]);
- }
-
- if(!strcasecmp(word[2],"pestersay")) {
- WasValid = 1;
- char *Poke = Buffer;
- const char *Peek = hexchat_get_info(ph, "nick");
- *(Poke++) = toupper(*(Peek++));
- while(*Peek) {
- if(isupper(*Peek))
- *(Poke++) = *Peek;
- Peek++;
- }
- *Poke = 0;
- hexchat_commandf(ph, "say <c=%s>%s: %s</c>", PesterchumColor, Buffer, word_eol[3]);
- }
- if(!strcasecmp(word[2],"pestercolor")) {
- WasValid = 1;
- hexchat_commandf(ph, "spark silentset Pesterchum Color %s", word_eol[3]);
- }
-
- if(!strcasecmp(word[2],"pesterchanhook")) {
- WasValid = 1;
- hexchat_commandf(ph, "spark silentset Pesterchum ChannelCommand %s", word_eol[3]);
- }
-
- if(!strcasecmp(word[2],"sayhook") || !strcasecmp(word[2],"sayhooknospace")) {
- WasValid = 1;
- SayHookSpace = 1;
- if(!strcasecmp(word[2],"sayhooknospace"))
- SayHookSpace = 0;
- if(word_eol[3]!=NULL) {
- if(!strcasecmp(word[3],"unhook")) {
- if(SayHook != NULL) {
- hexchat_unhook(ph, SayHook);
- SayHook = NULL;
- hexchat_printf(ph, "%sSay unhooked\n",SparklesUser);
- }
- else
- hexchat_printf(ph, "%sSay was already unhooked",SparklesUser);
- }
- else if(!strcasecmp(word[3],"hook")) {
- if(SayHook == NULL) {
- SayHook = hexchat_hook_command(ph, "", HEXCHAT_PRI_NORM, TrapNormalPost_cb, NULL, 0);
- hexchat_printf(ph, "%sSay hooked\n",SparklesUser);
- }
- else
- hexchat_printf(ph, "%sSay was already hooked",SparklesUser);
- }
- else if(!strcasecmp(word[3],"off")) {
- strcpy(SayHookCommand,"");
- hexchat_printf(ph, "%sSparkles will now leave /say ALONE (but the hook wasn't changed)\n",SparklesUser);
- }
- else {
- strcpy(SayHookCommand,word_eol[3]);
- hexchat_printf(ph, "%s%ssay will now be interpreted as /%s\n", SparklesUser, CommandPrefix, SayHookCommand);
- if(SayHook == NULL) {
- SayHook = hexchat_hook_command(ph, "", HEXCHAT_PRI_NORM, TrapNormalPost_cb, NULL, 0);
- hexchat_printf(ph, "%sand /say was hooked again\n", SparklesUser);
- }
-
- }
- }
- }
-
- if(!strcasecmp(word[2],"mehook")) {
- WasValid = 1;
- if(word_eol[3]!=NULL) {
- if(!strcasecmp(word[3],"off")) {
- strcpy(MeHookCommand,"");
- hexchat_printf(ph, "%sSparkles will now leave /me ALONE\n",SparklesUser);
- }
- else {
- strcpy(MeHookCommand,word_eol[3]);
- hexchat_printf(ph, "%s%sme will now be interpreted as /%s\n", SparklesUser, CommandPrefix, MeHookCommand);
- }
- }
- }
-
- if(!strcasecmp(word[2],"thou")) {
- WasValid = 1;
- const char *Word1[] = {"artless", "bawdy", "beslubbering", "bootless", "churlish", "cockered", "clouted", "craven", "currish", "dankish", "dissembling", "droning", "errant", "fawning", "fobbing", "froward", "frothy", "gleeking", "goatish", "gorbellied", "impertinent", "infectious", "jarring", "loggerheaded", "lumpish", "mammering", "mangled", "mewling", "paunchy", "pribbling", "puking", "puny", "qualling", "rank", "reeky", "roguish", "ruttish", "saucy", "spleeny", "spongy", "surly", "tottering", "unmuzzled", "vain", "venomed", "villainous", "warped", "wayward", "weedy", "yeasty",NULL};
- const char *Word2[] = {"base-courted", "bat-fowling", "beef-witted", "beetle-headed", "boil-brained", "clapper-clawed", "clay-brained", "common-kissing", "crook-pated", "dismal-dreaming", "dizzy-eyed", "doghearted", "dread-bolted", "earth-vexing", "elf-skinned", "fat-kidneyed", "fen-sucked", "flap-mouthed", "fly-bitten", "folly-fallen", "fool-born", "full-gorged", "guts-griping", "half-faced", "hasty-witted", "hedge-born", "hell-hated", "idle-headed", "ill-breeding", "ill-nurtured", "knotty-pated", "milk-livered", "motley-minded", "onion-eyed", "plume-plucked", "pottle-deep", "pox-marked", "reeling-ripe", "rough-hen", "rude-growing", "rump-fed", "sheep-biting", "spur-galled", "swag-bellied", "tardy-gaited", "tickle-brained", "toad-spotted", "urchin-snouted", "weather-bitten",NULL};
- const char *Word3[] = {"apple-john", "baggage", "barnacle", "bladder", "boar-pig", "bugbear", "bum-bailey", "canker-blossom", "clack-dick", "clotpole", "coxcomb", "codpiece", "death-token", "dewberry", "flap-dragon", "flax-wench", "flirt-gill", "foot-licker", "fustilarian", "giglet", "gudgeon", "haggard", "harpy", "hedge-pig", "horn-beast", "hugger-bugger", "joithead", "lewdster", "lout", "maggot-pie", "malt-worm", "mammet", "measle", "minnow", "miscreant", "moldwarp", "mumble-news", "nut-hook", "pigeon-egg", "pignut", "puttock", "pumpion", "ratsbane", "scut", "skainsmate", "strumpet", "varlot", "vassal", "wheyface", "wagtail",NULL};
- int Word1L=0, Word2L=0, Word3L=0;
- while(Word1[Word1L] != NULL) Word1L++;
- while(Word2[Word2L] != NULL) Word2L++;
- while(Word2[Word3L] != NULL) Word3L++;
- if(strcasecmp(word[3],"")&&strlen(word[3]))
- hexchat_commandf(ph, "say %s, thou %s %s %s!", word[3], Word1[rand2(Word1L)], Word2[rand2(Word2L)], Word3[rand2(Word3L)]);
- else
- hexchat_commandf(ph, "say Thou %s %s %s!", Word1[rand2(Word1L)], Word2[rand2(Word2L)], Word3[rand2(Word3L)]);
- }
-
- if(!strcasecmp(word[2],"rot13")) {
- WasValid = 1;
- strcpy(Buffer,word_eol[3]);
- char offset;
- for(i=0;Buffer[i];i++) {
- if(!isalpha(Buffer[i]))
- continue;
- if(islower(Buffer[i]))
- offset = 'a';
- else
- offset = 'A';
- if(Buffer[i] - offset < 13)
- Buffer[i] += 13;
- else
- Buffer[i] -= 13;
- }
- hexchat_commandf(ph, "say %s", Buffer);
- }
-
- if(!strcasecmp(word[2],"cmdstack") || !strcasecmp(word[2],"pipe")) {
- WasValid = 1;
- strcpy(CmdStackText, word[3]);
- CmdStackPtr = CmdStackText;
- strcpy(Buffer, CmdStackText);
- char *A = strstr(Buffer, "||");
- if(A) {
- *A = 0;
- CmdStackPtr=A+2;
- hexchat_commandf(ph, "%s %s", Buffer, word_eol[4]);
- }
- }
-
- if(!strcasecmp(word[2],"multicmd")) {
- WasValid = 1;
- char *Ptr = word[3];
- while(1) {
- strcpy(Buffer, Ptr);
- char *A = strstr(Buffer, "||");
- if(A) {
- *A = 0;
- Ptr=A+2;
- hexchat_commandf(ph, "%s", Buffer);
- }
- else {
- hexchat_commandf(ph, "%s", Buffer);
- break;
- }
- }
- }
-
- if(!strcasecmp(word[2],"SparkEncrypt1")) {
- WasValid = 1;
- unsigned char Key1 = rand()&255;
- unsigned char kA = (Key1 & 192) >> 6;
-// unsigned char kB = (Key1 & 48) >> 4;
- unsigned char kC = (Key1 & 15);
- char TinyBuf[128];
- sprintf(TinyBuf,"%s\3%.2d\3%.2d\3%.2d\xf",SparkEncryptPrefix,
- Key1&15, (Key1&0xf0)>>4, 0&15);
- strcpy(Buffer,TinyBuf);
-
- char *Poke = Buffer+strlen(TinyBuf);
- char *Peek = word_eol[3];
-
- while(*Peek) {
- char c = *(Peek++);
- char nyb = c &15;
- c&=~0x0f;
- if(c>=0x20) {
- switch(kA) {
- case 0: nyb ^=15;
- case 1: nyb +=kC; break;
- case 2: nyb ^=15;
- case 3: nyb -=kC; break;
- }
- }
- c|=(nyb&15);
- *(Poke++) = c;
- }
- *Poke = 0;
- if(NULL != strstr(Buffer, word_eol[3]))
- hexchat_commandf(ph,"spark sparkencrypt1 %s", word_eol[3]);
- else {
-// hexchat_printf(ph,"(SE1 %2i %2i)-\t%s\n", kA, kC, word_eol[3]);
- hexchat_printf(ph,"(SE1)-\t%s\n", word_eol[3]);
- hexchat_commandf(ph,"say %s", Buffer);
- }
- }
-
- if(!strcasecmp(word[2],"2sprintf") || !strcasecmp(word[2],"2slashf") || !strcasecmp(word[2],"2slashfi")) {
- WasValid = 1;
- char TinyBuf[32];
- char *Poke = Buffer;
- char *Peek = word_eol[3];
- char c;
- while(*Peek) {
- c = *(Poke++) = *(Peek++);
- switch(c) {
- case 0x1f: Poke--; *(Poke++) = '\\'; *(Poke++) = 'u'; break;
- case 0x02: Poke--; *(Poke++) = '\\'; *(Poke++) = 'b'; break;
- case 0x03: Poke--; *(Poke++) = '\\'; *(Poke++) = 'c'; break;
- case 0x1d: Poke--; *(Poke++) = '\\'; *(Poke++) = 'i'; break;
- case 0x16: Poke--; *(Poke++) = '\\'; *(Poke++) = 'R'; break;
- case 0x0f: Poke--; *(Poke++) = '\\'; *(Poke++) = 'p'; break;
- case 0x07: Poke--; *(Poke++) = '\\'; *(Poke++) = 'a'; break;
- case '\\': *(Poke++) = '\\'; break;
- default:
- if(!(isgraph2(c)||c==' ')) {
- *(--Poke) = 0;
- sprintf(TinyBuf, "\\x%x ", c);
- strcat(Buffer, TinyBuf);
- Poke+=strlen(TinyBuf);
- }
- break;
- }
- }
- *Poke = 0;
- if(strcasecmp(word[2],"2slashfi"))
- hexchat_printf(ph, "%s%sspark slashfs %s\n", SparklesUser, CommandPrefix, Buffer);
- else {
- hexchat_commandf(ph, "settext /spark slashfs %s", Buffer);
- hexchat_commandf(ph, "setcursor 15");
- }
- }
-
- if(!strcasecmp(word[2],"atloop")) { // atloop [format] [action] [text]
- WasValid = 1;
- if(!AttributeLoop(Buffer, word_eol[5], word[3])) {
- hexchat_commandf(ph, "%s %s", word[4], Buffer);
- } else {
- hexchat_printf(ph, "%sBad attribute loop?\n",SparklesUser);
- }
- }
- if(!strcasecmp(word[2],"atloops")) {
- WasValid = 1;
- hexchat_commandf(ph,"spark atloop %s say %s", SafeGet(word[3],""), SafeGet(word_eol[4],""));
- }
- if(!strcasecmp(word[2],"atloopm")) {
- WasValid = 1;
- hexchat_commandf(ph,"spark atloop %s me %s", SafeGet(word[3],""), SafeGet(word_eol[4],""));
- }
- if(!strcasecmp(word[2],"atloopi")) {
- WasValid = 1;
- hexchat_commandf(ph,"spark atloop %s settext %s", SafeGet(word[3],""), SafeGet(word_eol[4],""));
- }
- if(!strcasecmp(word[2],"unsettab")) {
- WasValid = 1;
- hexchat_commandf(ph,"settab %s", SafeGet(hexchat_get_info(ph, "channel"),""));
- }
-
- if(!strcasecmp(word[2],"backwards")) {
- WasValid = 1;
- char *Poke = Buffer;
- for(i=strlen(word_eol[3])-1;i!=-1;i--)
- *(Poke++) = word_eol[3][i];
- *Poke = 0;
- hexchat_commandf(ph, "say %s", Buffer);
- }
- if(!strcasecmp(word[2],"backwords")) {
- WasValid = 1;
- Backwords(word_eol[3], Buffer);
- hexchat_commandf(ph, "say %s", Buffer);
- }
-
- if(!strcasecmp(word[2],"recentclosed")) {
- WasValid = 1;
- hexchat_printf(ph, "Recently closed tabs: %s %s %s", ClosedList[0], ClosedList[1], ClosedList[2]);
- }
-
- if(!strcasecmp(word[2],"grabtopic")) {
- WasValid = 1;
- GrabbingTopic = 1;
- hexchat_command(ph, "topic");
- }
-
- if(!strcasecmp(word[2],"spawn") || !strcasecmp(word[2],"spawnquiet")) {
- WasValid = 1;
- // /spark(1) spawn(2) X(3) units(4) Command(5)
- int Slot;
- if(!strcasecmp(word[3],"clear")) {
- for(Slot=0;Slot<16;Slot++)
- if(SpawnHook[Slot]!=NULL) {
- struct SpawnInfo *FreeMe = hexchat_unhook(ph, SpawnHook[Slot]);
- if(FreeMe != NULL)
- free(FreeMe);
- SpawnHook[Slot]=NULL;
- }
- if(strcasecmp(word[2],"spawnquiet"))
- hexchat_printf(ph, "%sSpawn list cleared",SparklesUser);
- } else {
- double Time = strtod(word[3], NULL);
- switch(word[4][0]) {
- case 'd':
- Time*=24;
- case 'h':
- Time*=60;
- case 'm':
- Time*=60;
- case 's':
- Time*=1000;
- break;
- }
-
- struct SpawnInfo *Spawn = (struct SpawnInfo*)malloc(sizeof(struct SpawnInfo));
- int SpawnUsed = 0;
- for(Slot = 0; Slot<64; Slot++)
- if(SpawnHook[Slot] == NULL)
- if(Spawn != NULL) {
- if(strcasecmp(word[2],"spawnquiet"))
- hexchat_printf(ph,"%sTimer started! (%f seconds) \n", SparklesUser, Time/1000);
- strcpy(Spawn->Command, word_eol[5]);
- Spawn->Context = hexchat_get_context(ph);
- Spawn->Slot = Slot;
- SpawnHook[Slot] = hexchat_hook_timer(ph, Time, spawntimer_cb, Spawn);
- SpawnUsed = 1;
- break;
- }
- if(!SpawnUsed)
- free(Spawn);
- }
- }
-
- if(!strcasecmp(word[2],"rainbow") || !strcasecmp(word[2],"rainbowt")) {
- WasValid = 1;
- char *Poke = Buffer;
- for(i=0,j=0;word_eol[3][i];i++) {
- if(isgraph2(word_eol[3][i])) {
- *(Poke++) = 0x03;
- *(Poke++) = Rainbow[j][0];
- *(Poke++) = Rainbow[j++][1];
- if(j == 5) j = 0;
- }
- *(Poke++) = word_eol[3][i];
- }
- if(strcasecmp(word[2],"rainbowt"))
- *Poke = 0;
- else {
- *(Poke++) = 0x0f;
- *Poke = 0;
- }
- hexchat_commandf(ph, "say %s", Buffer);
- }
- if(!strcasecmp(word[2],"hstroll")) {
- WasValid = 1;
- hexchat_commandf(ph, "say %s", TrollFilter(Buffer, word_eol[4], word[3]));
- }
- if(!strcasecmp(word[2],"scarletsay")) {
- WasValid = 1;
- hexchat_commandf(ph, "say %s", ScarletFilter(Buffer, word_eol[3]));
- }
- if(!strcasecmp(word[2],"sellysay")) {
- WasValid = 1;
- hexchat_commandf(ph, "say %s", SellyFilter(Buffer, word_eol[3], 0));
- }
- if(!strcasecmp(word[2],"sellysay2")) {
- WasValid = 1;
- hexchat_commandf(ph, "say %s", SellyFilter(Buffer, word_eol[3], 1));
- }
- if(!strcasecmp(word[2],"replwords")) {
- WasValid = 1;
- hexchat_commandf(ph, "say %s", CustomReplace(Buffer, word_eol[4], word[3]));
- }
- if(!strcasecmp(word[2],"replchars") || !strcasecmp(word[2],"replcharsi") || !strcasecmp(word[2],"replcharsim")) {
- WasValid = 1;
- if(strlen(word[3])&1) {
- hexchat_printf(ph, "The list given to replchars must be of an even length\n");
- return HEXCHAT_EAT_ALL;
- }
- int CaseSensitive = !strcasecmp(word[2],"replchars");
- int MatchCase = !strcasecmp(word[2],"replcharsim");
-
- strcpy(Buffer, word_eol[4]);
- char *Poke = Buffer;
- while(*Poke) {
- char *RList = word[3];
- while(*RList) {
- if(*Poke == *RList)
- *Poke = RList[1];
- else if(!CaseSensitive && toupper(*Poke) == toupper(*RList)) {
- if(!MatchCase || !isalpha(*Poke))
- *Poke = RList[1];
- else
- *Poke = isupper(*Poke)?toupper(RList[1]):tolower(RList[1]);
- }
- RList+=2;
- }
- Poke++;
- }
-
- hexchat_commandf(ph, "say %s", Buffer);
- }
-
- if(!strcasecmp(word[2],"onesayhook") || !strcasecmp(word[2],"me2cmd") || !strcasecmp(word[2],"say2cmd")) {
- WasValid = 1;
- strcpy(OneSayHook, word[3]);
- UseOneSayHook = 1;
- hexchat_command(ph, word_eol[4]);
- UseOneSayHook = 0;
- }
-
- if(!strcasecmp(word[2],"me2say")) {
- WasValid = 1;
- strcpy(OneSayHook, "say");
- UseOneSayHook = 1;
- hexchat_command(ph, word_eol[3]);
- UseOneSayHook = 0;
- }
-
- if(!strcasecmp(word[2],"hideset")) {
- WasValid = 1;
- hexchat_commandf(ph, "spark hidecmd set %s");
- }
-
- if(!strcasecmp(word[2],"hidecmd")) {
- WasValid = 1;
- hexchat_context *Old = hexchat_get_context(ph);
- hexchat_command(ph, "query $");
- hexchat_context *New = hexchat_find_context(ph, NULL, "$");
- if(New != NULL)
- if(hexchat_set_context(ph, New)) {
- hexchat_command(ph, word_eol[3]);
- hexchat_command(ph, "close");
- hexchat_set_context(ph, Old);
- hexchat_command(ph, "gui focus");
- }
- }
-
- if(!strcasecmp(word[2],"space2newline")) {
- WasValid = 1;
- char *Ptr = word_eol[3];
- while(1) {
- strcpy(Buffer, Ptr);
- char *A = strstr(Buffer, " ");
- if(A) {
- *A = 0;
- Ptr=A+1;
- hexchat_commandf(ph, "say %s", Buffer);
- }
- else {
- hexchat_commandf(ph, "say %s", Buffer);
- break;
- }
- }
- }
-
- if(!strcasecmp(word[2],"spaces2newline")) {
- WasValid = 1;
- int SpaceCount = 0;
- int WordsPerLine = strtol(word[3], NULL, 10);
- if(WordsPerLine < 1)
- return HEXCHAT_EAT_ALL;
- strcpy(Buffer, word_eol[4]);
- char *Ptr = Buffer;
- char *Send = Ptr;
- while(*Ptr) {
- if(*Ptr == ' ') {
- SpaceCount++;
- if(SpaceCount == WordsPerLine) {
- *Ptr = 0;
- hexchat_commandf(ph, "say %s", Send);
- Send = Ptr+1;
- SpaceCount = 0;
- }
- }
- Ptr++;
- }
- if(*Send)
- hexchat_commandf(ph, "say %s", Send);
- }
-
- if(!strcasecmp(word[2],"repeatcmd")) { // /spark repeatcmd times command
- WasValid = 1;
- int i, Times=strtol(word[3],NULL,10);
- char *Cmd = word_eol[4];
- if(isdigit(word[4][0])) {
- Cmd = word_eol[5];
- hexchat_commandf(ph, "%s", Cmd);
- if(Times>1)
- hexchat_commandf(ph, "spark spawnquiet %s s spark repeatcmd %i %s %s", word[4], Times-1, word[4], Cmd);
- }
- else
- for(i=0;i<Times;i++)
- hexchat_commandf(ph, "%s", Cmd);
- }
- if(!strcasecmp(word[2],"rainbow4") || !strcasecmp(word[2],"rainbow4t")) { // 04 08 09 12 13
- WasValid = 1;
- char *Poke = Buffer;
- for(i=0,j=0;word_eol[3][i];i++) {
- if(isgraph2(word_eol[3][i]) && !(i&3)) {
- *(Poke++) = 0x03;
- *(Poke++) = Rainbow[j][0];
- *(Poke++) = Rainbow[j++][1];
- if(j == 5) j = 0;
- }
- *(Poke++) = word_eol[3][i];
- }
- if(strcasecmp(word[2],"rainbow4t"))
- *(Poke++) = 0x0f;
- *Poke = 0;
- hexchat_commandf(ph, "say %s", Buffer);
- }
- if(!strcasecmp(word[2],"bouncycaps")) {
- WasValid = 1;
- strcpy(Buffer,word_eol[3]);
- Buffer[0]=toupper(Buffer[i]);
- for(i=0;Buffer[i];i++)
- if(Buffer[i] == ' ')
- Buffer[i+1]=toupper(Buffer[i+1]);
- hexchat_commandf(ph, "say %s", Buffer);
- }
- if(!strcasecmp(word[2],"shufflechar")) { // /spark shufflechar Corruption Text
- WasValid = 1;
- ShuffleChars(Buffer, word_eol[4], strtol(word[3],NULL,10),0);
- hexchat_commandf(ph, "say %s", Buffer);
- }
- if(!strcasecmp(word[2],"allcaps")) {
- WasValid = 1;
- strcpy(Buffer,word_eol[3]);
- for(i=0;Buffer[i];i++)
- Buffer[i]=toupper(Buffer[i]);
- hexchat_commandf(ph, "say %s", Buffer);
- }
- if(!strcasecmp(word[2],"nocaps")) {
- WasValid = 1;
- strcpy(Buffer,word_eol[3]);
- for(i=0;Buffer[i];i++)
- Buffer[i]=tolower(Buffer[i]);
- hexchat_commandf(ph, "say %s", Buffer);
- }
- if(!strcasecmp(word[2],"altcaps")) {
- WasValid = 1;
- strcpy(Buffer,word_eol[3]);
- for(i=0;Buffer[i];i++)
- if(i&1)
- Buffer[i]=toupper(Buffer[i]);
- else
- Buffer[i]=tolower(Buffer[i]);
- hexchat_commandf(ph, "say %s", Buffer);
- }
- if(!strcasecmp(word[2],"acidtext")) {
- WasValid = 1;
- hexchat_commandf(ph, "say %s", AcidText(Buffer, word_eol[3]));
- }
- if(!strcasecmp(word[2],"accents")) {
- WasValid = 1;
- hexchat_commandf(ph, "say %s", AccentFilter(Buffer, word_eol[3]));
- }
- if(!strcasecmp(word[2],"randcaps") || !strcasecmp(word[2],"rainbowcaps")) {
- WasValid = 1;
- strcpy(Buffer,word_eol[3]);
- for(i=0;Buffer[i];i++)
- if(rand()&1)
- Buffer[i]=toupper(Buffer[i]);
- else
- Buffer[i]=tolower(Buffer[i]);
- if(!strcasecmp(word[2],"rainbowcaps"))
- hexchat_commandf(ph, "spark rainbow %s", Buffer);
- else
- hexchat_commandf(ph, "say %s", Buffer);
- }
- if(!strcasecmp(word[2],"run")) { // take a file and execute every line of it as a command
- WasValid = 1;
- int Quiet=0;
- if(word[4] != NULL && !strcasecmp(word[4],"quiet"))
- Quiet=1;
- if(word[3] != NULL) {
- FILE *Script;
- Script = fopen(word[3],"r");
- if(Script == NULL) {
- hexchat_printf(ph, "%sUnable to open \"%s\" for running\n", SparklesUser, word[3]);
- return HEXCHAT_EAT_ALL;
- }
- if(BeVerbose)
- hexchat_printf(ph, "%s'kay, opened \"%s\"\n", SparklesUser, word[3]);
- for(k=0;!k;i=0) {
- i=0;
- while(1) {
- j = fgetc(Script);
- Buffer[i++]=j;
- if(j == '\n' || j==EOF) {
- Buffer[i-1] = 0;
- if(j==EOF) k=1;
- break;
- }
- }
- if(!Quiet)
- hexchat_printf(ph, "%sread \"%s\"\n", SparklesUser,Buffer);
- hexchat_commandf(ph, "%s", Buffer);
- }
- fclose(Script);
- }
- }
-
- if(!strcasecmp(word[2],"onevent")){
- WasValid = 1;
- if(!strcasecmp(word[3], "list")) {
- for(i=0;i<ONEVENTS_SIZE;i++)
- if(OnEventInfos[i]) {
- ListOnEvent(Buffer, OnEventInfos[i]);
- hexchat_print(ph, Buffer);
- }
- } else if(!strcasecmp(word[3], "renumber")) {
- for(i=0;i<ONEVENTS_SIZE-1;i++) {
- if(OnEventInfos[i])
- continue;
- for(j=i+1;j<ONEVENTS_SIZE;j++)
- if(OnEventInfos[j]) {
- OnEventInfos[i] = OnEventInfos[j];
- OnEventInfos[j] = NULL;
- OnEventInfos[i]->Slot = i;
- break;
- }
- }
- hexchat_print(ph, "Renumbered the OnEvent list");
- } else if(!strcasecmp(word[3], "delete")) {
- if(!strcasecmp(word[4], "all")) {
- for(i=0;i<ONEVENTS_SIZE;i++)
- if(OnEventInfos[i]) {
- hexchat_unhook(ph, OnEventInfos[i]->Hook);
- free(OnEventInfos[i]);
- OnEventInfos[i] = NULL;
- }
- } else {
- for(i=4;word[i][0];i++) {
- j = strtol(word[i], NULL, 10);
- if(OnEventInfos[j]) {
- hexchat_unhook(ph, OnEventInfos[j]->Hook);
- free(OnEventInfos[j]);
- OnEventInfos[j] = NULL;
- if(!QuietOnEvents)
- hexchat_printf(ph, "Deleting OnEvent item %i", j);
- }
- }
- }
- } else if(!strcasecmp(word[3], "disable")) {
- for(i=4;word[i][0];i++) {
- j = strtol(word[i], NULL, 10);
- if(OnEventInfos[j]) {
- OnEventInfos[j]->Flags &= ~OEF_ENABLED;
- if(!QuietOnEvents)
- hexchat_printf(ph, "Disabling OnEvent item %i", j);
- }
- }
- } else if(!strcasecmp(word[3], "enable")) {
- for(i=4;word[i][0];i++) {
- j = strtol(word[i], NULL, 10);
- if(OnEventInfos[j]) {
- OnEventInfos[j]->Flags |= OEF_ENABLED;
- if(!QuietOnEvents)
- hexchat_printf(ph, "Enabling OnEvent item %i", j);
- }
- }
- } else if(!strcasecmp(word[3], "set")) {
- j = -1;
- if(isdigit(word[4][0])) { // user selected a specific slot
- j = strtol(word[4], NULL, 10);
- if(j < 0 || j >= ONEVENTS_SIZE)
- return HEXCHAT_EAT_ALL;
- }
- if(j == -1) {
- for(j=0;j<ONEVENTS_SIZE;j++)
- if(!OnEventInfos[j])
- break;
- if(j==ONEVENTS_SIZE) {
- hexchat_print(ph, "No free OnEvent slots");
- return HEXCHAT_EAT_ALL;
- }
- }
- if(OnEventInfos[j]) {
- hexchat_unhook(ph, OnEventInfos[j]->Hook);
- free(OnEventInfos[j]);
- }
- OnEventInfos[j] = (struct OnEventInfo*)malloc(sizeof(struct OnEventInfo));
- if(!OnEventInfos[j])
- return HEXCHAT_EAT_ALL;
- memset(OnEventInfos[j], 0, sizeof(struct OnEventInfo));
- strlcpy(OnEventInfos[j]->EventName, word[5], 32);
- OnEventInfos[j]->Slot = j;
- OnEventInfos[j]->Flags = OEF_ENABLED;
- int High = 0;
- for(k=0;word[4][k];k++) {
- switch(word[4][k]) {
- case 't':
- OnEventInfos[j]->Flags |= OEF_TEMPORARY;
- break;
- case 'd':
- OnEventInfos[j]->Flags &= ~OEF_ENABLED;
- break;
- case 's':
- OnEventInfos[j]->Flags |= OEF_SAVE;
- break;
- case 'h':
- OnEventInfos[j]->Flags |= OEF_HIGH_PRIORITY;
- High = 1;
- break;
- }
- }
- for(k=6;isdigit(word[k][0]);k++)
- strlcpy(OnEventInfos[j]->Match[k-6], word[6], 80);
- strlcpy(OnEventInfos[j]->Response, word_eol[k], 500);
- OnEventInfos[j]->Hook = hexchat_hook_print(ph, word[5], High?HEXCHAT_PRI_HIGH:HEXCHAT_PRI_NORM, on_event_cb, OnEventInfos[j]);
- hexchat_printf(ph, "Set OnEvent slot %i", j);
- }
- }
-
- if(!strcasecmp(word[2],"contextstack")){
- WasValid = 1;
- if(!strcasecmp(word[3],"push"))
- ContextStack[ContextStackSP++] = hexchat_get_context(ph);
- else if(!strcasecmp(word[3],"pop"))
- hexchat_set_context(ph,ContextStack[--ContextStackSP]);
- else if(!strcasecmp(word[3],"clear"))
- ContextStackSP=0;
- else
- hexchat_printf(ph, "Contextstack is at position %i",ContextStackSP);
- }
-
- if(!strcasecmp(word[2],"cmdallchan")){
- WasValid = 1;
- hexchat_list *list = hexchat_list_get(ph, "channels");
- int DoInChannels = 0;
- int DoInQueries = 0;
- int DoInServers = 0;
- int ThisNetworkOnly = 0;
- int PartedOnly = 0;
- int Id;
- char *a = word[3];
- while(*a) {
- switch(*(a++)) {
- case 'N': ThisNetworkOnly = 1; break;
- case 'q': DoInQueries = 1; break;
- case 'c': DoInChannels = 1; break;
- case 's': DoInServers = 1; break;
- case 'p': PartedOnly = 1; break;
- case 'P': PartedOnly = 2; break;
- }
- }
- const char *b;
- hexchat_get_prefs(ph, "id", &b, &Id);
- if(list) {
- while(hexchat_list_next(ph, list)) {
- if(hexchat_list_int(ph, list, "type")==2) { // channel
- if(DoInChannels)
- if(PartedOnly==2 || (PartedOnly==1&&!hexchat_list_int(ph, list, "users")) || (PartedOnly==0&&hexchat_list_int(ph, list, "users")))
- if(!ThisNetworkOnly || hexchat_list_int(ph, list, "id")==Id)
- if(hexchat_set_context(ph,(hexchat_context *)hexchat_list_str(ph, list, "context")) )
- hexchat_command(ph, word_eol[4]);
- }
- else if(hexchat_list_int(ph, list, "type")==1) { // server
- if(DoInServers)
- if(hexchat_set_context(ph,(hexchat_context *)hexchat_list_str(ph, list, "context")) )
- hexchat_command(ph, word_eol[4]);
- }
- else if(hexchat_list_int(ph, list, "type")==3) { // query
- if(DoInQueries)
- if(!ThisNetworkOnly || hexchat_list_int(ph, list, "id")==Id)
- if(hexchat_set_context(ph,(hexchat_context *)hexchat_list_str(ph, list, "context")) )
- hexchat_command(ph, word_eol[4]);
- }
- }
- hexchat_list_free(ph, list);
- }
- }
- if(!strcasecmp(word[2],"chanclean")) {
- WasValid = 1;
- hexchat_commandf(ph, "spark cmdallchan %sp close", word[3]);
- }
-
- if(!strcasecmp(word[2],"SendModeSelect")){
- WasValid = 1;
- hexchat_list *list;
- int Users = 0;
- const char *UserList[100];
- list = hexchat_list_get(ph, "users");
- if(list){
- while(hexchat_list_next(ph, list)) {
- if(hexchat_list_int(ph, list, "selected")) {
- UserList[Users]=hexchat_list_str(ph, list, "nick");
- Users = Users+1;
- if(Users >= 100)
- break;
- }
- }
- hexchat_list_free(ph, list);
- }
-// hexchat_printf(ph, "Setting %s on %i users\n", word[3], Users);
- hexchat_send_modes(ph, UserList, Users, 0, word[3][0], word[3][1]);
- }
-
- if(!strcasecmp(word[2],"SendModePrefix")){ // /spark sendmodeprefix +o prefix exclude
- WasValid = 1;
- hexchat_list *list;
- int Users = 0;
- int Exclude;
- char *Prefix = word[4];
- if(!strcasecmp(Prefix, "."))
- Prefix = "";
- const char *UserList[100]; // nobody will ever trust this evil squirrel with >40 users
- list = hexchat_list_get(ph, "users");
- if(list){
- while(hexchat_list_next(ph, list)) {
- if(!strcasecmp(Prefix, hexchat_list_str(ph, list, "prefix"))) {
- int ShouldExclude = 0;
- for(Exclude = 5; word[Exclude]!=NULL && strlen(word[Exclude]); Exclude++)
- if(!strcasecmp(word[Exclude], hexchat_list_str(ph, list, "nick"))) {
- ShouldExclude = 1;
- break;
- }
- if(ShouldExclude)
- continue;
- UserList[Users]=hexchat_list_str(ph, list, "nick");
- Users = Users+1;
- if(Users >= 100)
- break;
- }
- }
- hexchat_list_free(ph, list);
- }
- hexchat_send_modes(ph, UserList, Users, 0, word[3][0], word[3][1]);
- }
-
- if(!strcasecmp(word[2],"pusers")){ // prefix of users in local context
- WasValid = 1;
- hexchat_list *list;
- int Users = 0;
- list = hexchat_list_get(ph, "users");
- if(list){
- while(hexchat_list_next(ph, list)) {
- hexchat_printf(ph, "user %s has %s \n",hexchat_list_str(ph, list, "nick"), hexchat_list_str(ph, list, "prefix"));
- Users = Users+1;
- }
- hexchat_list_free(ph, list);
- }
- }
-
- if(!strcasecmp(word[2],"get_info")) { // for debugging and curiosity
- WasValid = 1;
- if(word[3] != NULL)
- hexchat_printf(ph,"%shexchat_get_info(ph, \"%s\") returns \"%s\";\n", SparklesUser,
- word[3], SafeGet(hexchat_get_info(ph, word[3]),NULL));
- }
- if(!strcasecmp(word[2],"get_prefs")) { // for debugging and curiosity
- WasValid = 1;
- int Int;
- const char *Str;
- switch(hexchat_get_prefs (ph, word[3], &Str, &Int)) {
- case 0:
- hexchat_printf(ph, "%shexchat_get_prefs() failed\n" ,SparklesUser);
- break;
- case 1:
- hexchat_printf(ph, "%sstring: \"%s\" \n", SparklesUser, Str);
- break;
- case 2:
- hexchat_printf(ph, "%sinteger: %i | %x \n", SparklesUser, Int, Int);
- break;
- case 3:
- hexchat_printf(ph, "%sboolean: %i \n", SparklesUser, Int);
- break;
- }
- }
-
- if(!strcasecmp(word[2],"randtype")) {
- WasValid = 1;
- RandomType = strtol(word[3], NULL, 10);
- if(word[4] == NULL || strcasecmp(word[4],"quiet"))
- hexchat_printf(ph, "%sRandom number type set to %i \n", SparklesUser, RandomType);
- }
- if(!strcasecmp(word[2],"randnum")) {
- WasValid = 1;
- hexchat_printf(ph, "%sRandom number: %i \n", SparklesUser, rand2(strtol(word[3], NULL, 10)));
- }
-
- if(!strcasecmp(word[2],"pesterchum")) {
- WasValid = 1;
- if(!strcasecmp(word[3],"on")) {
- hexchat_commandf(ph, "spark silentset Pesterchum Disabled on");
- hexchat_printf(ph,"%sPesterchum mode OFF",SparklesUser);
- }
- if(!strcasecmp(word[3],"off")) {
- hexchat_commandf(ph, "spark silentset PrettyJanus Disabled off");
- hexchat_printf(ph,"%sPesterchum mode ON",SparklesUser);
- }
- }
- if(!strcasecmp(word[2],"prettyjanus")) {
- WasValid = 1;
- if(!strcasecmp(word[3],"on")) {
- hexchat_commandf(ph, "spark silentset PrettyJanus Disabled on");
- hexchat_printf(ph,"%sPretty Janus OFF",SparklesUser);
- }
- if(!strcasecmp(word[3],"off")) {
- hexchat_commandf(ph, "spark silentset PrettyJanus Disabled off");
- hexchat_printf(ph,"%sPretty Janus ON",SparklesUser);
- }
- }
- if(!strcasecmp(word[2],"invitejoin")) {
- WasValid = 1;
- if(!strcasecmp(word[3],"on")) {
- hexchat_commandf(ph, "spark silentset Automatic JoinOnInvite on");
- hexchat_printf(ph,"%sJoin-on-invite enabled",SparklesUser);
- }
- if(!strcasecmp(word[3],"off")) {
- hexchat_commandf(ph, "spark silentset Automatic JoinOnInvite off");
- hexchat_printf(ph,"%sJoin-on-invite disabled",SparklesUser);
- }
- }
- if(!strcasecmp(word[2],"rejoin")) {
- WasValid = 1;
- if(!strcasecmp(word[3],"on")) {
- hexchat_commandf(ph, "spark silentset Automatic RejoinOnKick on");
- hexchat_printf(ph,"%sRejoin-on-kick enabled",SparklesUser);
- }
- if(!strcasecmp(word[3],"off")) {
- hexchat_commandf(ph, "spark silentset Automatic RejoinOnKick off");
- hexchat_printf(ph,"%sRejoin-on-kick disabled",SparklesUser);
- }
- }
- if(!strcasecmp(word[2],"autoident")) {
- WasValid = 1;
- if(!strcasecmp(word[3],"on")) {
- hexchat_commandf(ph, "spark silentset Automatic DisableAutoIdent on");
- hexchat_printf(ph,"%sAuto-ident disabled",SparklesUser);
- }
- if(!strcasecmp(word[3],"off")) {
- hexchat_commandf(ph, "spark silentset Automatic DisableAutoIdent off");
- hexchat_printf(ph,"%sAuto-ident re-enabled",SparklesUser);
- }
- }
-
- if(!strcasecmp(word[2],"autoghost")) {
- WasValid = 1;
- if(!strcasecmp(word[3],"on")) {
- hexchat_commandf(ph, "spark silentset Automatic DisableAutoGhost on");
- hexchat_printf(ph,"%sAuto-ghost disabled",SparklesUser);
- }
- if(!strcasecmp(word[3],"off")) {
- hexchat_commandf(ph, "spark silentset Automatic DisableAutoGhost on");
- hexchat_printf(ph,"%sAuto-ghost re-enabled",SparklesUser);
- }
- }
-
- if(!strcasecmp(word[2],"autonickdeblue")) {
- WasValid = 1;
- if(!strcasecmp(word[3],"on")) {
- hexchat_commandf(ph, "spark silentset Automatic DisableAutoNickColorReset on");
- hexchat_printf(ph,"%sAuto-nick color reset disabled",SparklesUser);
- }
- if(!strcasecmp(word[3],"off")) {
- hexchat_commandf(ph, "spark silentset Automatic DisableAutoNickColorReset off");
- hexchat_printf(ph,"%sAuto-nick color reset re-enabled",SparklesUser);
- }
- }
-
- if(!strcasecmp(word[2],"plusjfix")) {
- WasValid = 1;
- if(!strcasecmp(word[3],"on")) {
- DisablePlusJFix = 1; hexchat_printf(ph,"%s+J fix disabled",SparklesUser);
- }
- if(!strcasecmp(word[3],"off")) {
- DisablePlusJFix = 0; hexchat_printf(ph,"%s+J fix re-enabled",SparklesUser);
- }
- }
-
- if(!strcasecmp(word[2],"activity2focus")) {
- WasValid = 1;
- if(!strcasecmp(word[3],"on")) {
- hexchat_commandf(ph, "spark silentset Automatic Activity2Focus on");
- hexchat_printf(ph,"%sActivity-to-Focus enabled",SparklesUser);
- }
- if(!strcasecmp(word[3],"off")) {
- hexchat_commandf(ph, "spark silentset Automatic Activity2Focus off");
- hexchat_printf(ph,"%sActivity-to-Focus disabled",SparklesUser);
- }
- }
-
- if(!strcasecmp(word[2],"eathighlights")) {
- WasValid = 1;
- if(!strcasecmp(word[3],"on")) {
- EatHighlights = 1; hexchat_printf(ph,"%sHighlights will now be eaten",SparklesUser);
- }
- if(!strcasecmp(word[3],"off")) {
- EatHighlights = 0; hexchat_printf(ph,"%sHighlights will now be left alone",SparklesUser);
- }
- }
-
- if(!strcasecmp(word[2],"invite")) {
- WasValid = 1;
- if(!strcasecmp(word[3],"eat")) {
- EatInvites = 1; hexchat_printf(ph,"%sInvites will now be eaten",SparklesUser);
- }
- if(!strcasecmp(word[3],"leave")) {
- EatInvites = 0; hexchat_printf(ph,"%sInvites will now be left alone",SparklesUser);
- }
- }
- if(!strcasecmp(word[2],"unsettabs")) { // unset all tabs
- WasValid = 1;
- hexchat_list *list = hexchat_list_get(ph, "channels");
- if(list) {
- while(hexchat_list_next(ph, list)) {
- if( hexchat_set_context(ph,(hexchat_context *)hexchat_list_str(ph, list, "context")))
- hexchat_command(ph, "spark unsettab");
- }
- hexchat_list_free(ph, list);
- }
- }
-
- if(!strcasecmp(word[2],"spaceysay")) {
- WasValid = 1;
- hexchat_commandf(ph, "spark atloop |*_ say %s", word_eol[3]);
- }
-
- if(!strcasecmp(word[2],"echofocused")) { // echo to focused tab
- WasValid = 1;
- hexchat_context *Focused = hexchat_find_context(ph, NULL, NULL);
- hexchat_context *This = hexchat_get_context(ph);
- hexchat_set_context(ph, Focused);
- hexchat_print(ph, word_eol[3]);
- hexchat_set_context(ph, This);
- }
-
- if(!strcasecmp(word[2],"rchan")) { // with preserved context
- WasValid = 1;
- hexchat_command(ph, "spark contextstack push");
- hexchat_commandf(ph, "spark rchanc %s", word_eol[3]);
- hexchat_command(ph, "spark contextstack pop");
- }
- if(!strcasecmp(word[2],"rchan2")) { // with preserved context
- WasValid = 1;
- hexchat_command(ph, "spark contextstack push");
- hexchat_commandf(ph, "spark rchan2c %s", word_eol[3]);
- hexchat_command(ph, "spark contextstack pop");
- }
- if(!strcasecmp(word[2],"rchan2c")) { // redirect to channel
- WasValid = 1;
- hexchat_list *list = hexchat_list_get(ph, "channels");
- if(list) {
- while(hexchat_list_next(ph, list)) {
- if(!strcasecmp(hexchat_list_str(ph, list, "channel"),SafeGet(word[3],NULL))) {
- if( hexchat_set_context(ph,(hexchat_context *)hexchat_list_str(ph, list, "context")))
- hexchat_command(ph, SafeGet(word_eol[4],"echo Okay, and do WHAT on that channel?"));
- }
- }
- hexchat_list_free(ph, list);
- }
- }
- if(!strcasecmp(word[2],"rchanc")) { // redirect to channel (on same network)
- WasValid = 1;
- hexchat_context *Go = hexchat_find_context(ph, NULL, word[3]);
- if( hexchat_set_context(ph, Go))
- hexchat_command(ph, word_eol[4]);
- }
- if(!strcasecmp(word[2],"mrchan")) {
- WasValid = 1;
- char *Ptr = word[3];
- while(1) {
- strcpy(Buffer, Ptr);
- char *A = strstr(Buffer, "!");
- if(A) {
- *A = 0;
- Ptr=A+1;
- hexchat_context *Go = hexchat_find_context(ph, NULL, Buffer);
- if(hexchat_set_context(ph, Go))
- hexchat_command(ph, word_eol[4]);
- }
- else {
- hexchat_context *Go = hexchat_find_context(ph, NULL, Buffer);
- if(hexchat_set_context(ph, Go))
- hexchat_command(ph, word_eol[4]);
- break;
- }
- }
- }
-
- if(!strcasecmp(word[2],"help")) { // get help
- WasValid = 1;
- hexchat_print(ph,"Read https://github.com/NovaSquirrel/SparklesPlugin/blob/master/README.md");
- }
-/* WHY DID I EVEN TRY TO IMPLEMENT THIS
- AND WHY DIDN'T I JUST MAKE IT READ WHOIS RESULTS
- if(!strcasecmp(word[2],"mutualchan")) {
- WasValid = 1;
- strcpy(Buffer,"");
- if(!strcasecmp(word[3],"")) {
- // use current channel
- }
- else { // search for channels you're sharing with the given user
- hexchat_list *list = hexchat_list_get(ph, "channels");
- if(list != NULL) {
- while(hexchat_list_next(ph, list))
- if(hexchat_list_int(ph, list, "type")==2 && hexchat_list_int(ph, list, "users"))
- if(hexchat_set_context(ph,(hexchat_context *)hexchat_list_str(ph, list, "context"))) {
- hexchat_list *users = hexchat_list_get(ph, "users");
- if(users != NULL) {
- while(hexchat_list_next(ph, users))
- if(!hexchat_nickcmp(ph, hexchat_list_str(ph, list, "nick"),word[3]))
- sprintf(Buffer, "%s%s, ", Buffer, hexchat_get_info(ph, "channel"));
- hexchat_list_free(ph, users);
- }
- }
- hexchat_printf(ph, "Channels shared with %s: %s\n", word[3], Buffer);
- hexchat_list_free(ph, list);
- }
- }
- }
-*/
- if(!strcasecmp(word[2],"chancolorset")) { // set all channels to one color
- WasValid = 1;
- hexchat_list *list = hexchat_list_get(ph, "channels");
- if(list) {
- while(hexchat_list_next(ph, list)) {
- if( hexchat_set_context(ph,(hexchat_context *)hexchat_list_str(ph, list, "context")) )
- hexchat_commandf(ph, "gui color %s", (word[3]!=NULL ? word[3]: "0"));
- }
- hexchat_list_free(ph, list);
- }
- }
-
- if(!strcasecmp(word[2],"chancolorset2")) { // for one server only
- WasValid = 1;
- const char *Server = hexchat_get_info(ph, "server");
- if(Server != NULL) {
- hexchat_list *list = hexchat_list_get(ph, "channels");
- if(list) {
- while(hexchat_list_next(ph, list)) {
- if(!strcasecmp(hexchat_list_str(ph, list, "server"), Server)) {
- if( hexchat_set_context(ph,(hexchat_context *)hexchat_list_str(ph, list, "context")) )
- hexchat_commandf(ph, "gui color %s", (word[3]!=NULL ? word[3]: "0"));
- }
- }
- hexchat_list_free(ph, list);
- }
- }
- }
-
- if(!WasValid)
- hexchat_printf(ph, "\"%s\" doesn't seem to be a Sparkles command\n", word[2]);
- return HEXCHAT_EAT_ALL;
-}
-
-static int invite_cb(char *word[], void *userdata) {
- if(JoinOnInvite > 0)
- if(strcasecmp(word[1],"#dontjoinitsatrap"))
- hexchat_commandf(ph,"JOIN %s",word[1]);
- if(EatInvites > 0)
- return HEXCHAT_EAT_ALL;
- return HEXCHAT_EAT_NONE;
-}
-
-static int userquit_cb(char *word[], void *userdata) {
- if(AutoReclaimNick) {
- if(MyNickCmp(word[1], GhostReclaimNick)) {
- hexchat_commandf(ph, "nick %s", GhostReclaimNick);
- AutoReclaimNick = 0;
- }
- }
- return HEXCHAT_EAT_NONE;
-}
-
-static int younick_cb(char *word[], void *userdata) {
- if(!DisableAutoNickDeblue)
- hexchat_commandf(ph,"spark spawnquiet 1 s spark chancolorset2 0");
- return HEXCHAT_EAT_NONE;
-}
-
-static int youkick_cb(char *word[], void *userdata) {
- if(RejoinKick > 0)
- hexchat_commandf(ph,"JOIN %s",word[2]);
- return HEXCHAT_EAT_NONE;
-}
-
-static int getnotice_cb(char *word[], void *userdata) {
-/*
- if(MoveServicesToServer) { // still not fixed, oh wellll
- int Id;
- hexchat_get_prefs(ph, "id", NULL, &Id);
- hexchat_list *list = hexchat_list_get(ph, "channels");
- if(list) {
- while(hexchat_list_next(ph, list))
- if(hexchat_list_int(ph, list, "type")==1 && hexchat_list_int(ph, list, "id")==Id)
- hexchat_set_context(ph,(hexchat_context *)hexchat_list_str(ph, list, "context"));
- hexchat_list_free(ph, list);
- }
- }
-*/
-
- if(MyNickCmp(word[1], "NickServ")) {
- if(!DisableAutoIdent)
- if(NULL != strstr(word[2],"is registered and protected.") || NULL != strstr(word[2],"Please choose a different nickname"))
- hexchat_commandf(ph, "spark ident");
- if(AutoReclaimNick)
- if((NULL != strstr(word[2],"isn't currently in use")) ||
- (NULL != strstr(word[2],"ghost")) ||
- (NULL != strstr(word[2],"Ghost")) ||
- (NULL != strstr(word[2],"killed"))) {
- hexchat_commandf(ph, "nick %s", GhostReclaimNick);
- hexchat_commandf(ph,"spark spawnquiet 1 s nick %s", GhostReclaimNick);
- AutoReclaimNick = 0;
- }
- }
- return HEXCHAT_EAT_NONE;
-}
-static int nickclash_cb(char *word[], void *userdata) {
- if(((unsigned)time(NULL)) < (GhostDelayTime+9))
- return HEXCHAT_EAT_NONE;
- if(!DisableAutoGhost) {
- hexchat_commandf(ph,"spark spawnquiet 2.2 s spark ghost2 %s", word[1]);
- }
- return HEXCHAT_EAT_NONE;
-}
-
-static int ctcp_cb(char *word[], void *userdata) {
- if(DisableSparklesCTCP)
- return HEXCHAT_EAT_NONE;
- if(!strcasecmp(word[1],"SPARKLES"))
- hexchat_commandf(ph,"nctcp %s %s %s", word[2], PNAME, PVERSION);
- return HEXCHAT_EAT_NONE;
-}
-
-static int EatHighlightSay_cb(char *word[], void *userdata) {
- if(!EatHighlights)
- return HEXCHAT_EAT_NONE;
- hexchat_emit_print(ph, "Channel Message", word[1], word[2], word[3], word[4], NULL);
- return HEXCHAT_EAT_ALL;
-}
-
-static int EatHighlightAct_cb(char *word[], void *userdata) {
- if(!EatHighlights)
- return HEXCHAT_EAT_NONE;
- hexchat_emit_print(ph, "Channel Action", word[1], word[2], word[3], word[4], NULL);
- return HEXCHAT_EAT_ALL;
-}
-
-static int channelmessage_cb(char *word[], void *userdata) {
- // 1-nick, 2-text
- NeedSpaceBetweenX5Font = 0;
- int PrefixLen = strlen(SparkEncryptPrefix);
-
- int i = 0;
- if(!DisablePrettyJanus) {
- for(i=0;JanusLinkbots[i]!=NULL&&strcmp("",JanusLinkbots[i])&&i<4;i++)
- if(MyNickCmp(word[1], JanusLinkbots[i])) {
- if(word[2][0] == '<') {
- char Nick[80];
- char *Ends = strchr(word[2],'>');
- if(!Ends)
- break;
- char *Poke = Nick, *Peek = word[2]+1;
- while(*Peek != '>') {
- *(Poke++) = *(Peek++);
- if(Poke > (Nick+sizeof(Nick)))
- return HEXCHAT_EAT_NONE;
- }
- *Poke = 0;
- if(!Ends[1]) return HEXCHAT_EAT_NONE;
- if(!Ends[2]) return HEXCHAT_EAT_NONE;
- Ends+=2;
-
- hexchat_commandf(ph, "recv :%s!sparkles@sparkles PRIVMSG %s :%s", Nick, hexchat_get_info(ph, "channel"), Ends);
- return HEXCHAT_EAT_ALL;
- }
- if(word[2][0] == '*') {
- char Nick[80];
- char *Peek = word[2]+1;
- if(*Peek == ' ') Peek++;
- char *Poke = Nick;
- while(*Peek && (*Peek != ' ')) {
- *(Poke++) = *(Peek++);
- }
- *Poke = 0;
- if(!*Peek) return HEXCHAT_EAT_NONE;
- if(!Peek[1]) return HEXCHAT_EAT_NONE;
- if(!Peek[2]) return HEXCHAT_EAT_NONE;
-
- hexchat_commandf(ph, "recv :%s!sparkles@sparkles PRIVMSG %s :\1ACTION %s\1", Nick, hexchat_get_info(ph, "channel"), Peek+1);
- return HEXCHAT_EAT_ALL;
- }
- break;
- }
- }
-
- if((strlen(word[2]) > (PrefixLen + 7)) && !memcmp(word[2], SparkEncryptPrefix, strlen(SparkEncryptPrefix) )) {
- char *Peek = word[2]+PrefixLen;
- // \c__\c__\p
-
- if(Peek != NULL) {
- char Key1 = strtol(Peek+1,NULL,10) | (strtol(Peek+4,NULL,10)<<4);
- char Buffer[768]="";
- char *Poke = Buffer;
-
- Peek = strchr(Peek, 15); // look for the "normal formatting" code on the end
- if(Peek == NULL)
- return HEXCHAT_EAT_NONE;
-
- unsigned char kA = (Key1 & 192) >> 6;
- unsigned char kC = (Key1 & 15);
- while(*Peek) {
- char c = *(Peek++);
- char nyb = c &15;
- c&=~0x0f;
- if(c>=0x20) {
- switch(kA) {
- case 0: nyb -=kC; nyb ^=15; break;
- case 1: nyb -=kC; break;
- case 2: nyb +=kC; nyb ^=15; break;
- case 3: nyb +=kC; break;
- }
- }
- c|=(nyb&15);
- *(Poke++) = c;
- }
- *Poke = 0;
-
-// hexchat_printf(ph, "(SE1)%s\xf\t%s\n", word[1], Buffer);
- hexchat_commandf(ph, "recv :SE1/%s!sparkles@sparkles PRIVMSG %s :%s", word[1], hexchat_get_info(ph, "channel"), Buffer);
- }
- return HEXCHAT_EAT_ALL;
- }
- return HEXCHAT_EAT_NONE;
-}
-
-void INIConfigHandler(const char *Group, const char *Item, const char *Value) {
-// printf("[%s] %s = %s\n", Group, Item, Value);
- if(!strcasecmp(Group, "OnEventList")) {
- QuietOnEvents++;
- hexchat_commandf(ph, "spark onevent set %s", Value);
- QuietOnEvents--;
- return;
- }
- int i, *Int;
- char *String;
- for(i=0;ConfigOptions[i].Group!=NULL;i++)
- if(!strcasecmp(ConfigOptions[i].Group, Group)&&!strcasecmp(ConfigOptions[i].Item, Item)) {
- switch(ConfigOptions[i].Type) {
- case CONFIG_INTEGER:
- Int = ConfigOptions[i].Data;
- if(isdigit(*Value))
- *Int = strtol(Value, NULL, 10);
- else
- hexchat_printf(ph, "Item \"[%s] %s\" requires a numeric value\n", Group, Item);
- return;
- case CONFIG_BOOLEAN:
- Int = ConfigOptions[i].Data;
- if(!strcasecmp(Value, "on") || !strcasecmp(Value, "yes"))
- *Int = 1;
- else if(!strcasecmp(Value, "off") || !strcasecmp(Value, "no"))
- *Int = 0;
- else
- hexchat_printf(ph, "Item \"[%s] %s\" requires a value of on/yes or off/no (You put %s)\n", Group, Item, Value);
- return;
- case CONFIG_STRING:
- String = ConfigOptions[i].Data;
- if(strlen(Value)<ConfigOptions[i].Len)
- strcpy(String, Value);
- else
- hexchat_printf(ph, "Item \"[%s] %s\" requires a smaller string\n", Group, Item);
- return;
- }
- break;
- }
- hexchat_printf(ph, "Config item \"[%s] %s\" not valid\n", Group, Item);
-}
-
-int ParseINI(FILE *File, void (*Handler)(const char *Group, const char *Item, const char *Value)) {
- char Group[512]="", *Item, *Value, Line[512]="", c, *Poke = NULL;
- if(File == NULL)
- return 0;
- hexchat_printf(ph, "Sparkles config file found\n");
- int i;
- while(!feof(File)) {
- for(i=0,c=1;;i++) {
- c = fgetc(File);
- if(c=='\r'||c=='\n') {
- Line[i]=0;
- break;
- }
- Line[i] = c;
- }
- while(c=='\r'||c=='\n')
- c = fgetc(File);
- fseek(File, -1 , SEEK_CUR);
- if(!*Line)
- break;
- else if(*Line == ';'); // comment
- else if(*Line == '[') { // group
- Poke = strchr(Line, ']');
- if(Poke) *Poke = 0;
- strcpy(Group, Line+1);
- } else { // item
- Poke = strchr(Line, '=');
- if(Poke) {
- *Poke = 0;
- Item = Line;
- Value = Poke+1;
- Handler(Group, Item, Value);
- }
- }
- }
- fclose(File);
- return 1;
-}
-
-void hexchat_plugin_get_info(char **name, char **desc, char **version, void **reserved) {
- *name = PNAME;
- *desc = PDESC;
- *version = PVERSION;
-}
-int hexchat_plugin_deinit() {
- hexchat_commandf(ph,"spark spawnquiet clear"); // no memory leaks please
- hexchat_commandf(ph,"MENU -p4 DEL Sparkles");
- if(CustomYiffBuffer)
- free(CustomYiffBuffer);
- hexchat_printf(ph,"Sparkles unloaded");
- return 1;
-}
-
-int hexchat_plugin_init(hexchat_plugin *plugin_handle,
- char **plugin_name,
- char **plugin_desc,
- char **plugin_version,
- char *arg) {
- /* we need to save this for use with any hexchat_* functions */
- ph = plugin_handle;
- #if USE_SPARKLES_USER
- sprintf(SparklesUser, "%c01,09=Sparkles=%c\t", 3,15);
- #elseif
- strcpy(SparklesUser,"");
- #endif
- hexchat_commandf(ph,"MENU -p4 ADD Sparkles");
- hexchat_commandf(ph,"MENU ADD \"Sparkles/Settings\"");
- hexchat_commandf(ph,"MENU -t0 ADD \"Sparkles/Settings/Auto-rejoin\" \"spark rejoin on\" \"spark rejoin off\"");
- hexchat_commandf(ph,"MENU -t0 ADD \"Sparkles/Settings/Join on invite\" \"spark invitejoin on\" \"spark invitejoin off\"");
- hexchat_commandf(ph,"MENU -t0 ADD \"Sparkles/Settings/No auto-ident\" \"spark autoident on\" \"spark autoident off\"");
- hexchat_commandf(ph,"MENU -t0 ADD \"Sparkles/Settings/No auto-nick-color-fix\" \"spark autonickdeblue on\" \"spark autonickdeblue off\"");
- hexchat_commandf(ph,"MENU -t0 ADD \"Sparkles/Settings/No +J auto-rejoin fix\" \"spark plusjfix on\" \"spark plusjfix off\"");
- hexchat_commandf(ph,"MENU -t0 ADD \"Sparkles/Settings/Switch gui focus on activity\" \"spark activity2focus on\" \"spark activity2focus off\"");
- hexchat_commandf(ph,"MENU -t0 ADD \"Sparkles/Settings/No autoghost\" \"spark autoghost on\" \"spark autoghost off\"");
- hexchat_commandf(ph,"MENU -t0 ADD \"Sparkles/Settings/No pesterchum assist\" \"spark pesterchum on\" \"spark pesterchum off\"");
- hexchat_commandf(ph,"MENU -t0 ADD \"Sparkles/Settings/No pretty janus\" \"spark prettyjanus on\" \"spark prettyjanus off\"");
- hexchat_commandf(ph,"MENU -t0 ADD \"Sparkles/Settings/Disable highlights\" \"spark set Automatic DisableHighlights on\" \"spark set Automatic DisableHighlights off\"");
- hexchat_commandf(ph,"MENU -t0 ADD \"Sparkles/Settings/Character counter\" \"spark set Automatic CharCounter on\" \"spark set Automatic CharCounter off\"");
- hexchat_commandf(ph,"MENU -t0 ADD \"Sparkles/Settings/PM Alerts\" \"spark set Automatic PMAlerts on\" \"spark set Automatic PMAlerts off\"");
-
- hexchat_commandf(ph,"MENU ADD \"Sparkles/Cram\"");
- hexchat_commandf(ph,"MENU ADD \"Sparkles/Cram/Slash\" \"spark cram\"");
- hexchat_commandf(ph,"MENU ADD \"Sparkles/Cram/No slash\" \"spark cram noslash\"");
-
- #ifdef HEXCHAT_PLUGIN_H
- hexchat_commandf(ph,"MENU ADD \"Sparkles/HexChat\"");
- hexchat_commandf(ph,"MENU ADD \"Sparkles/HexChat/Disable beeps\" \"set input_filter_beep on\"");
- hexchat_commandf(ph,"MENU ADD \"Sparkles/HexChat/Enable beeps\" \"set input_filter_beep off\"");
- #else
- hexchat_commandf(ph,"MENU ADD \"Sparkles/XChat\"");
- hexchat_commandf(ph,"MENU ADD \"Sparkles/XChat/Disable beeps\" \"set input_filter_beep on\"");
- hexchat_commandf(ph,"MENU ADD \"Sparkles/XChat/Enable beeps\" \"set input_filter_beep off\"");
- #endif
-
- hexchat_commandf(ph,"MENU ADD \"Sparkles/Reset tab colors\" \"spark chancolorset 0\"");
- hexchat_commandf(ph,"MENU ADD \"Sparkles/Remove sayhook\" \"spark sayhook off\"");
- hexchat_commandf(ph,"MENU ADD \"Sparkles/Remove mehook\" \"spark mehook off\"");
- hexchat_commandf(ph,"MENU ADD \"Sparkles/Save preferences\" \"spark saveprefs\"");
- hexchat_commandf(ph,"MENU ADD \"Sparkles/Sparkles Help\" \"spark help\"");
-
- /* tell xchat our info */
- *plugin_name = PNAME; *plugin_desc = PDESC; *plugin_version = PVERSION;
-
- /* make hooks */
- hexchat_hook_command(ph, "spark", HEXCHAT_PRI_NORM, Spark_cb, "For info: /spark help", 0);
-
- memset(OnEventInfos, 0, sizeof(OnEventInfos));
- #if ENABLE_NSFW_CONTENT
- hexchat_hook_command(ph, "yiff", HEXCHAT_PRI_NORM, yiff_cb, "Usage: /yiff [nick]", 0);
- #endif
- SayHook = hexchat_hook_command(ph, "", HEXCHAT_PRI_NORM, TrapNormalPost_cb, NULL, 0);
- MeHook = hexchat_hook_command(ph, "me", HEXCHAT_PRI_NORM, TrapActionPost_cb, NULL, 0);
- hexchat_hook_print(ph, "Close Context", HEXCHAT_PRI_NORM, Close_cb, NULL);
-
- hexchat_hook_print(ph, "Nick Clash", HEXCHAT_PRI_NORM, nickclash_cb, NULL);
- hexchat_hook_print(ph, "Channel Message", HEXCHAT_PRI_NORM, channelmessage_cb, (int)0);
- hexchat_hook_print(ph, "Channel Message", HEXCHAT_PRI_LOW, Activity2Focus_cb, (int)0);
- hexchat_hook_print(ph, "Channel Msg Hilight", HEXCHAT_PRI_LOW, Activity2Focus_cb, (int)0);
- hexchat_hook_print(ph, "Channel Action", HEXCHAT_PRI_LOW, Activity2Focus_cb, (int)0);
- hexchat_hook_print(ph, "Channel Action Hilight", HEXCHAT_PRI_LOW, Activity2Focus_cb, (int)0);
-
- hexchat_hook_print(ph, "Channel Msg Hilight", HEXCHAT_PRI_HIGH, EatHighlightSay_cb, (int)0);
- hexchat_hook_print(ph, "Channel Action Hilight", HEXCHAT_PRI_HIGH, EatHighlightAct_cb, (int)0);
-
- hexchat_hook_print(ph, "Notice", HEXCHAT_PRI_NORM, getnotice_cb, 0);
- hexchat_hook_print(ph, "Quit", HEXCHAT_PRI_NORM, userquit_cb, 0);
- hexchat_hook_print(ph, "You Join", HEXCHAT_PRI_NORM, WhatNetwork_cb,0);
- hexchat_hook_print(ph, "Invited", HEXCHAT_PRI_LOW, invite_cb, 0);
- hexchat_hook_print(ph, "CTCP Generic", HEXCHAT_PRI_LOW, ctcp_cb, 0);
- hexchat_hook_print(ph, "CTCP Generic to Channel", HEXCHAT_PRI_LOW, ctcp_cb, 0);
-
- hexchat_hook_print(ph, "You Kicked", HEXCHAT_PRI_LOW, youkick_cb, 0);
- hexchat_hook_print(ph, "Your Nick Changing", HEXCHAT_PRI_NORM, younick_cb, 0);
- hexchat_hook_server(ph, "RAW LINE", HEXCHAT_PRI_NORM, RawServer_cb, NULL);
-
- hexchat_hook_timer(ph, 1000, timer_cb, NULL);
- hexchat_hook_print(ph, "Key Press", HEXCHAT_PRI_NORM, charcounter_cb, NULL);
- hexchat_hook_print(ph, "Your Message", HEXCHAT_PRI_NORM, charcounter_cb, NULL);
- hexchat_hook_print(ph, "Your Action", HEXCHAT_PRI_NORM, charcounter_cb, NULL);
- hexchat_hook_print(ph, "Focus Tab", HEXCHAT_PRI_NORM, charcounter_cb, NULL);
-
- hexchat_hook_print(ph, "Private Action", HEXCHAT_PRI_NORM, privatemessage_cb, NULL);
- hexchat_hook_print(ph, "Private Message", HEXCHAT_PRI_NORM, privatemessage_cb, NULL);
- hexchat_hook_print(ph, "Private Action to Dialog", HEXCHAT_PRI_NORM, privatemessage_cb, NULL);
- hexchat_hook_print(ph, "Private Message to Dialog", HEXCHAT_PRI_NORM, privatemessage_cb, NULL);
- srand((unsigned)time(NULL));
- GhostDelayTime = (unsigned)time(NULL);
-
- sprintf(ConfigFilePath, "%s/Sparkles/sparkles.ini", hexchat_get_info(ph, "xchatdirfs"));
- ParseINI(fopen(ConfigFilePath,"rb"), INIConfigHandler);
-
- FILE *Script;
- char Buffer[512];
-
- sprintf(Buffer, "%s/Sparkles/autoexec.txt", hexchat_get_info(ph, "xchatdirfs"));
- int i,j,k;
- Script = fopen(Buffer,"r");
- if(Script != NULL) {
- hexchat_print(ph, "Auto-exec script was found");
- for(k=0;!k;i=0) {
- i=0;
- while(1) {
- j = fgetc(Script);
- Buffer[i++]=j;
- if(j == '\n' || j==EOF) {
- Buffer[i-1] = 0;
- if(j==EOF) k=1;
- break;
- }
- }
- hexchat_commandf(ph, "%s", Buffer);
- }
- fclose(Script);
- }
-
- hexchat_printf(ph, "Sparkles version %s was loaded successfully \n",PVERSION);
- return 1;
-}
diff --git a/makeHexsparkles.bat b/makeHexsparkles.bat
index 6b47ab9..07b3a5c 100644
--- a/makeHexsparkles.bat
+++ b/makeHexsparkles.bat
@@ -1,4 +1,3 @@
-4hexchat sparkles.c hexsparkles.c
-gcc -c -o hexsparkles.o hexsparkles.c -std=gnu99
+gcc -c -o hexsparkles.o sparkles.c -D HEXCHAT -std=gnu99
gcc -o hexsparkles.dll -s -shared hexsparkles.o -Wl,--subsystem,windows
pause \ No newline at end of file
diff --git a/makeHexsparkles64.bat b/makeHexsparkles64.bat
index 0539496..26d7270 100644
--- a/makeHexsparkles64.bat
+++ b/makeHexsparkles64.bat
@@ -1,4 +1,3 @@
-4hexchat sparkles.c hexsparkles.c
-gcc -c -o hexsparkles64.o hexsparkles.c -std=gnu99 -m64
+gcc -c -o hexsparkles64.o sparkles.c -D HEXCHAT -std=gnu99 -m64
gcc -o hexsparkles64.dll -s -shared hexsparkles64.o -Wl,--subsystem,windows -m64
pause \ No newline at end of file
diff --git a/sparkles.c b/sparkles.c
index d084b75..d065944 100644
--- a/sparkles.c
+++ b/sparkles.c
@@ -26,7 +26,12 @@
#define ENABLE_NSFW_CONTENT 1
#define PESTERCHUM_NETWORK "Pesterchum"
+#ifndef HEXCHAT
#include "xchat-plugin.h"
+#else
+#include "hexchat-plugin.h"
+#include "4hexchat.h"
+#endif
#include <stdio.h> // sprintf() and file access
#include <string.h> // compares and copies and stuff
#include <stdarg.h> // Adj() really needs this
@@ -46,6 +51,7 @@ static int EatInvites = 0;
static int JoinOnInvite= 0;
static int BeVerbose = 0;
static int LastYiff = -1;
+static int HexChat = 0;
static int DisableAutoIdent = 0;
static int DisableAutoNickDeblue= 0;
static int DisableAutoGhost=0;
@@ -2290,11 +2296,10 @@ static int Spark_cb(char *word[], char *word_eol[], void *userdata) {
xchat_get_prefs(ph, "irc_logmask", &LogMask, NULL);
const char *ReplaceWith[] = {Network, Chan, Server};
TextInterpolate(LogPath, LogMask, '%', "ncs", ReplaceWith);
- #ifdef HEXCHAT_PLUGIN_H
- sprintf(Buffer, "%s/logs/%s", xchat_get_info(ph, "xchatdirfs"), LogPath);
- #else
- sprintf(Buffer, "%s/xchatlogs/%s", xchat_get_info(ph, "xchatdirfs"), LogPath);
- #endif
+ if(HexChat)
+ sprintf(Buffer, "%s/logs/%s", xchat_get_info(ph, "xchatdirfs"), LogPath);
+ else
+ sprintf(Buffer, "%s/xchatlogs/%s", xchat_get_info(ph, "xchatdirfs"), LogPath);
xchat_commandf(ph,"spark aexec %s %s\n", TextEditor, Buffer);
}
@@ -3837,15 +3842,15 @@ int xchat_plugin_init(xchat_plugin *plugin_handle,
xchat_commandf(ph,"MENU ADD \"Sparkles/Cram/Slash\" \"spark cram\"");
xchat_commandf(ph,"MENU ADD \"Sparkles/Cram/No slash\" \"spark cram noslash\"");
- #ifdef HEXCHAT_PLUGIN_H
+ if(HexChat) {
xchat_commandf(ph,"MENU ADD \"Sparkles/HexChat\"");
xchat_commandf(ph,"MENU ADD \"Sparkles/HexChat/Disable beeps\" \"set input_filter_beep on\"");
xchat_commandf(ph,"MENU ADD \"Sparkles/HexChat/Enable beeps\" \"set input_filter_beep off\"");
- #else
+ } else {
xchat_commandf(ph,"MENU ADD \"Sparkles/XChat\"");
xchat_commandf(ph,"MENU ADD \"Sparkles/XChat/Disable beeps\" \"set input_filter_beep on\"");
xchat_commandf(ph,"MENU ADD \"Sparkles/XChat/Enable beeps\" \"set input_filter_beep off\"");
- #endif
+ }
xchat_commandf(ph,"MENU ADD \"Sparkles/Reset tab colors\" \"spark chancolorset 0\"");
xchat_commandf(ph,"MENU ADD \"Sparkles/Remove sayhook\" \"spark sayhook off\"");
@@ -3931,3 +3936,16 @@ int xchat_plugin_init(xchat_plugin *plugin_handle,
xchat_printf(ph, "Sparkles version %s was loaded successfully \n",PVERSION);
return 1;
}
+
+int hexchat_plugin_init(xchat_plugin *plugin_handle, char **plugin_name, char **plugin_desc, char **plugin_version, char *arg) {
+ HexChat = 1;
+ return xchat_plugin_init(plugin_handle, plugin_name, plugin_desc, plugin_version, arg);
+}
+
+void hexchat_plugin_get_info(char **name, char **desc, char **version, void **reserved) {
+ xchat_plugin_get_info(name, desc, version, reserved);
+}
+
+int hexchat_plugin_deinit() {
+ return xchat_plugin_deinit();
+}