From 247c6a58e43399a05a7a6db94a35b3196a816279 Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sat, 27 Nov 2021 15:36:52 +0000 Subject: [PATCH 001/201] prevent race in threaded dns Found by: michaelortmann Patch by: michaelortmann --- src/dns.c | 2 ++ src/eggdrop.h | 1 + src/net.c | 10 ++++++++-- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/dns.c b/src/dns.c index 1d7d5ad16..f49dfc103 100644 --- a/src/dns.c +++ b/src/dns.c @@ -543,8 +543,10 @@ void *thread_dns_ipbyhost(void *arg) #endif freeaddrinfo(res0); } + pthread_mutex_lock(&dtn->mutex); dtn->ok = !i; close(dtn->fildes[1]); + pthread_mutex_unlock(&dtn->mutex); return NULL; } diff --git a/src/eggdrop.h b/src/eggdrop.h index 5b8c8d045..21e1f175f 100644 --- a/src/eggdrop.h +++ b/src/eggdrop.h @@ -788,6 +788,7 @@ enum { /* linked list instead of array because of multi threading */ struct dns_thread_node { + pthread_mutex_t mutex; int fildes[2]; int type; sockname_t addr; diff --git a/src/net.c b/src/net.c index 9a25e3a91..52a6efa8c 100644 --- a/src/net.c +++ b/src/net.c @@ -1034,10 +1034,16 @@ int sockread(char *s, int *len, sock_list *slist, int slistmax, int tclonly) for (dtn = dtn_prev->next; dtn; dtn = dtn->next) { fd = dtn->fildes[0]; if (FD_ISSET(fd, &fdr)) { - if (dtn->type == DTN_TYPE_HOSTBYIP) + if (dtn->type == DTN_TYPE_HOSTBYIP) { + pthread_mutex_lock(&dtn->mutex); call_hostbyip(&dtn->addr, dtn->host, dtn->ok); - else + pthread_mutex_unlock(&dtn->mutex); + } + else { + pthread_mutex_lock(&dtn->mutex); call_ipbyhost(dtn->host, &dtn->addr, dtn->ok); + pthread_mutex_unlock(&dtn->mutex); + } close(dtn->fildes[0]); dtn_prev->next = dtn->next; nfree(dtn); From 57baf6c50e09ccb8a63048943dc0ee85040901d5 Mon Sep 17 00:00:00 2001 From: Geo Date: Sat, 27 Nov 2021 10:49:38 -0500 Subject: [PATCH 002/201] Add values argument to Tcl cap command Found by: thommey Patch by: Geo New Tcl option lists values associated with each capability in a variety of formats --- doc/sphinx_source/mainDocs/tcl-commands.rst | 10 ++--- src/mod/server.mod/tclserv.c | 41 ++++++++++++++++++++- 2 files changed, 45 insertions(+), 6 deletions(-) diff --git a/doc/sphinx_source/mainDocs/tcl-commands.rst b/doc/sphinx_source/mainDocs/tcl-commands.rst index 444fdba89..d9f21b13f 100644 --- a/doc/sphinx_source/mainDocs/tcl-commands.rst +++ b/doc/sphinx_source/mainDocs/tcl-commands.rst @@ -156,13 +156,13 @@ clearqueue Module: server -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -cap [arg] -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +cap [arg] +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - Description: displays CAP status or sends a raw CAP command to the server. "ls" will list the capabilities Eggdrop is internally tracking as supported by the server, "enabled" will list the capabilities Eggdrop is internally tracking as negotiated with the server, "req" will request the capabilities listed in "arg" from the server, and raw will send a raw CAP command to the server. The arg field is a single argument, and should be submitted as a single string. For example, to request capabilities foo and bar, you would use [cap req "foo bar"], and for example purposes, sending the same request as a raw command would be [cap raw "REQ :foo bar"]. + Description: displays CAP status or sends a raw CAP command to the server. "ls" will list the capabilities Eggdrop is internally tracking as supported by the server. "values" will list all capabilities and their associated CAP 302 values (if any) as a key/value pair, and "values" with a capability name as arg will list the values associated for the capability. "enabled" will list the capabilities Eggdrop is internally tracking as negotiated with the server. "req" will request the capabilities listed in "arg" from the server. "raw" will send a raw CAP command to the server. The arg field is a single argument, and should be submitted as a single string. For example, to request capabilities foo and bar, you would use [cap req "foo bar"], and for example purposes, sending the same request as a raw command would be [cap raw "REQ :foo bar"]. - Returns: a list of CAP capabilities for the "enabled" and "ls" sub-commands; otherwise nothing. + Returns: a list of CAP capabilities for the "enabled" and "ls" sub-commands; a dict of capability/value pairs for the "values" command or a list if "values" if followed by an argument; otherwise nothing. Module: server diff --git a/src/mod/server.mod/tclserv.c b/src/mod/server.mod/tclserv.c index 83acdf91d..d58b70003 100644 --- a/src/mod/server.mod/tclserv.c +++ b/src/mod/server.mod/tclserv.c @@ -266,8 +266,10 @@ static int tcl_tagmsg STDVAR { /* Tcl interface to send CAP messages to server */ static int tcl_cap STDVAR { char s[CAPMAX]; + int found = 0; struct capability *current; - Tcl_Obj *capes; + struct cap_values *currentvalue; + Tcl_Obj *capes, *values; BADARGS(2, 3, " sub-cmd ?arg?"); capes = Tcl_NewListObj(0, NULL); @@ -288,6 +290,43 @@ static int tcl_cap STDVAR { current = current->next; } Tcl_SetObjResult(irp, capes); + } else if (!strcasecmp(argv[1], "values")) { + capes = Tcl_NewListObj(0, NULL); + values = Tcl_NewListObj(0, NULL); + current = cap; + while (current != NULL) { + if ((argc == 3) &&(!strcasecmp(argv[2], current->name))) { + found = 1; + } + currentvalue = current->value; + while (currentvalue != NULL) { + if (argc == 3) { + if (!strcasecmp(argv[2], current->name)) { + /* Don't get confused, we use the capes var but its really values */ + Tcl_ListObjAppendElement(irp, capes, + Tcl_NewStringObj(currentvalue->name, -1)); + } + } else { + Tcl_ListObjAppendElement(irp, values, + Tcl_NewStringObj(currentvalue->name, -1)); + } + currentvalue = currentvalue->next; + } + if (argc != 3) { + Tcl_ListObjAppendElement(irp, capes, + Tcl_NewStringObj(current->name, -1)); + Tcl_ListObjAppendElement(irp, capes, values); + } + /* Clear out the list so it isn't repeatedly added */ + values = Tcl_NewListObj(0, NULL); + current = current->next; + } + if ((argc == 3) && (!found)) { + simple_sprintf(s, "Capability \"%s\" is not enabled", argv[2]); + Tcl_AppendResult(irp, s, NULL); + return TCL_ERROR; + } + Tcl_SetObjResult(irp, capes); /* Send a request to negotiate a capability with server */ } else if (!strcasecmp(argv[1], "req")) { if (argc != 3) { From e7d256fab4eb8801b4f2ff907ae6780e8db53906 Mon Sep 17 00:00:00 2001 From: Geo Date: Sat, 27 Nov 2021 10:57:24 -0500 Subject: [PATCH 003/201] Use nick/altnick/randnick on bad nickname If an eggdrop joins a server and attempts to register with an invalid nick, it looks at keep-nick in the config. If keep-nick was enabled, it would not try another nickname and end up disconnecting. If keep-nick was not enabled, it would generate a random nickname to continue registration with. This PR modifies the behavior to instead remove a reliance on keep-nick, and first try the altnick, and THEN a random nick, with the thinking that getting the eggdrop online is more important than preserving an invalid nickname, and will also simplify the troubleshooting for a user from 'eggdrop doesnt run' to 'eggdrop has a weird nickname' --- src/mod/server.mod/servmsg.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/mod/server.mod/servmsg.c b/src/mod/server.mod/servmsg.c index 27fd014e2..5b64a63da 100644 --- a/src/mod/server.mod/servmsg.c +++ b/src/mod/server.mod/servmsg.c @@ -877,12 +877,14 @@ static int got432(char *from, char *msg) botname); else { putlog(LOG_MISC, "*", IRC_BADBOTNICK); - if (!keepnick) { + if (!strcmp(erroneous, origbotname)) { + strlcpy(nick, get_altbotnick(), sizeof nick); + } else { make_rand_str_from_chars(nick, sizeof nick - 1, CHARSET_LOWER_ALPHA); - putlog(LOG_MISC, "*", "NICK IS INVALID: '%s' (using '%s' instead)", - erroneous, nick); - dprintf(DP_MODE, "NICK %s\n", nick); } + putlog(LOG_MISC, "*", "NICK IS INVALID: '%s' (using '%s' instead)", + erroneous, nick); + dprintf(DP_MODE, "NICK %s\n", nick); return 0; } return 0; From 881f5ee158c84926c85e1d01f73d3e466a79a73f Mon Sep 17 00:00:00 2001 From: Geo Date: Sat, 27 Nov 2021 11:05:27 -0500 Subject: [PATCH 004/201] Add server list Tcl command Adds server list command (similar to server add/server remove), returns a list of all servers added to the bot as a list of lists; in the format {{host} {port} {password}}. The port will have a + prepended if it is an SSL-enabled port --- doc/sphinx_source/mainDocs/tcl-commands.rst | 9 +++++ src/mod/server.mod/tclserv.c | 37 +++++++++++++++++++-- 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/doc/sphinx_source/mainDocs/tcl-commands.rst b/doc/sphinx_source/mainDocs/tcl-commands.rst index d9f21b13f..5a7ae24db 100644 --- a/doc/sphinx_source/mainDocs/tcl-commands.rst +++ b/doc/sphinx_source/mainDocs/tcl-commands.rst @@ -200,6 +200,15 @@ server remove [[+]port] Module: server +^^^^^^^^^^^ +server list +^^^^^^^^^^^ + + Description: lists all servers currently added to the bots internal server list + + Returns: A list of lists in the format {{hostname} {port} {password}} + + Module: server User Record Manipulation Commands --------------------------------- diff --git a/src/mod/server.mod/tclserv.c b/src/mod/server.mod/tclserv.c index d58b70003..6547d442e 100644 --- a/src/mod/server.mod/tclserv.c +++ b/src/mod/server.mod/tclserv.c @@ -502,15 +502,48 @@ static int tcl_queuesize STDVAR static int tcl_server STDVAR { int ret; + char s[7]; + struct server_list *z; + Tcl_Obj *server; - BADARGS(3, 5, " subcommand host ?port ?password??"); + BADARGS(2, 5, " subcommand ?host ?port? ?password?"); if (!strcmp(argv[1], "add")) { ret = add_server(argv[2], argc >= 4 && argv[3] ? argv[3] : "", argc >= 5 && argv[4] ? argv[4] : ""); + if (!ret) { + server = Tcl_NewListObj(0, NULL); + Tcl_ListObjAppendElement(irp, server, Tcl_NewStringObj(argv[2], -1)); + if ((argc >= 4) && argv[3]) { + Tcl_ListObjAppendElement(irp, server, Tcl_NewStringObj(argv[3], -1)); + } else { + Tcl_ListObjAppendElement(irp, server, Tcl_NewStringObj("", -1)); + } + if ((argc >= 5) && argv[4]) { + Tcl_ListObjAppendElement(irp, server, Tcl_NewStringObj(argv[4], -1)); + } else { + Tcl_ListObjAppendElement(irp, server, Tcl_NewStringObj("", -1)); + } + Tcl_SetObjResult(irp, server); + } } else if (!strcmp(argv[1], "remove")) { ret = del_server(argv[2], argc >= 4 && argv[3] ? argv[3] : ""); + } else if (!strcmp(argv[1], "list")) { + Tcl_Obj *servers = Tcl_NewListObj(0, NULL); + z = serverlist; + while(z != NULL) { + server = Tcl_NewListObj(0, NULL); + snprintf(s, sizeof s, "%s%d", z->ssl ? "+" : "", z->port); + Tcl_ListObjAppendElement(irp, server, Tcl_NewStringObj(z->name, -1)); + Tcl_ListObjAppendElement(irp, server, Tcl_NewStringObj(s, -1)); + Tcl_ListObjAppendElement(irp, server, Tcl_NewStringObj(z->pass, -1)); + Tcl_SetObjResult(irp, server); + Tcl_ListObjAppendElement(irp, servers, server); + z = z->next; + } + Tcl_SetObjResult(irp, servers); + return TCL_OK; } else { Tcl_AppendResult(irp, "Invalid subcommand: ", argv[1], - ". Should be \"add\" or \"remove\"", NULL); + ". Should be \"add\", \"remove\", or \"list\"", NULL); return TCL_ERROR; } if (ret == 0) { From c5345f9d67941193df92ea4731c8e505f31e255d Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sat, 27 Nov 2021 16:32:35 +0000 Subject: [PATCH 005/201] Log error on rejected botattr --- src/cmds.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/cmds.c b/src/cmds.c index e20ff99e9..ffbc88d7b 100644 --- a/src/cmds.c +++ b/src/cmds.c @@ -2142,9 +2142,10 @@ static void cmd_botattr(struct userrec *u, int idx, char *par) pls.chan = 0; mns.chan = 0; } - if (!glob_owner(user)) { + if (!glob_owner(user) && ((pls.bot | mns.bot) & (BOT_SHARE | BOT_GLOBAL))) { pls.bot &= ~(BOT_SHARE | BOT_GLOBAL); mns.bot &= ~(BOT_SHARE | BOT_GLOBAL); + dprintf(idx, "You do not have Global Owner privileges, so you cant change share attributes\n"); } user.match = FR_BOT | (chan ? FR_CHAN : 0); get_user_flagrec(u2, &user, par); From 8d3600bc20d5df958328c807a0bb2e3756931b8b Mon Sep 17 00:00:00 2001 From: Geo Date: Sat, 27 Nov 2021 17:55:59 -0500 Subject: [PATCH 006/201] Documentation update --- doc/IRCv3 | 54 +++++ doc/html/installAndSetup/upgrading.html | 221 ++++++++++++++++++ doc/html/mainDocs/ircv3.html | 188 +++++++++++++++ doc/sphinx_source/conf.py | 4 +- doc/sphinx_source/installAndSetup/index.rst | 1 + .../installAndSetup/upgrading.rst | 82 +++++++ doc/sphinx_source/mainDocs/ircv3.rst | 9 +- 7 files changed, 554 insertions(+), 5 deletions(-) create mode 100644 doc/IRCv3 create mode 100644 doc/html/installAndSetup/upgrading.html create mode 100644 doc/html/mainDocs/ircv3.html create mode 100644 doc/sphinx_source/installAndSetup/upgrading.rst diff --git a/doc/IRCv3 b/doc/IRCv3 new file mode 100644 index 000000000..b82fb2221 --- /dev/null +++ b/doc/IRCv3 @@ -0,0 +1,54 @@ +IRCv3 support Last revised: Jun 20, 2021 + +IRCv3 support + +This document provides information about IRCv3 capabilities, as defined +via specifications documented by the IRCv3 working group +(https://ircv3.net/). Support for some of these specifications was added +starting with version 1.9.0, and more capabilites are added as possible +with new versions. + +ABOUT + +As more and more IRC servers began to develop and implement their own +versions of the IRC protocol (generally defined in RFC1459 and RFC2812), +a working group comprised of server, client, and bot developers decided +to work together to document these features to make their implementation +defined and standardized across servers. What emerged was the IRCv3 set +of standards. The specifications developed by the IRCv3 working group +was designed to be backwards compatible and are generally implemented +via a CAP (capability) request sent at the initialization of an IRC +session. A client can optinoally request these "extra" capabilities be +enabled through the CAP request, with the assumption that the client can +then support the capability requested and enabled. Not all servers or +clients support the same capabilites, a general support list can be via +the appropriate support table link at https://ircv3.net/. + +USAGE + +Within eggdrop.conf, several common IRCv3-defined capabilities are +enabled simply changing their setting to '1'. Other capabilities without +explicit settings in eggdrop.conf may be requested by adding them in a +space-separated list to the cap-request setting. For more information on +what a specific IRCv3-defined capability does, please consult +https://ircv3.net/irc/. + +SUPPORTED CAP CAPABILITIES + +The following capabilites are supported by Eggdrop: + + - CAP requests + - SASL 3.1 + - account-notify + - account-tag + - away-notify + - chghost + - echo-message + - extended-join + - invite-notify + - message-tags + - server-time + - setname + - +typing + +Copyright (C) 2010 - 2021 Eggheads Development Team diff --git a/doc/html/installAndSetup/upgrading.html b/doc/html/installAndSetup/upgrading.html new file mode 100644 index 000000000..6572596a9 --- /dev/null +++ b/doc/html/installAndSetup/upgrading.html @@ -0,0 +1,221 @@ + + + + + + + + Upgrading — Eggdrop 1.9.2 documentation + + + + + + + + + + + + + +
+
+ +
+ +
+
+
+ +
+

Upgrading

+

Last revised: November 27, 2021

+
+

Upgrading Eggdrop from v1.6/v1.8 -> v1.9

+
+

What’s new? To gain a full understanding of changes to the Eggdrop +v1.9 version line, you can read the following documents:

+
+
INSTALL +README +doc/TLS +doc/IPV6 +doc/Changes1.9 +doc/tcl-commands.doc
+

All of these documents combined will fill you in on the latest changes to +Eggdrop in version 1.9.x. All files, with the exception of Changes1.9, are +also available in html format in doc/html/.

+

For support, feel free to visit us on Libera #eggdrop.

+

If you are upgrading from a pre-1.6 version of Eggdrop:

+
+
    +
  1. Before you start the bot for the first time, BACKUP your userfile.
  2. +
  3. DON’T USE YOUR OLD CONFIG FILE. MAKE A NEW ONE!
  4. +
+
+
+
+
+

Must-read changes made to Eggdrop v1.9 from Eggdrop1.8

+

These are NOT all changes or new settings; rather just the “killer” changes that may directly affect Eggdrop’s previous performance without modification.

+
+

Config

+

To migrate from a 1.8 to a 1.9 Eggdrop, some changes are suggested to be made in your configuration file:

+
    +
  • Eggdrop has deprecated the blowfish module for password hashing in favor of the PBKDF2 module. This is a BIG change which, if done carelessly, has the potential to render stored passwords useless. Please see doc/PBKDF2 for information on how to properly migrate your userfiles and passwords to the new module.

    +
  • +
  • Eggdrop 1.9 switched from the “set servers {}” syntax to the “server add” command. For example, if your configuration file previously had:

    +
    set servers {
    +  my.server.com:6667
    +}
    +
    +
    +

    you should now instead use:

    +
    server add my.server.com 6667
    +
    +
    +

    Please read the config file for additional examples

    +
  • +
  • Eggdrop no longer requires the ‘-n’ flag to start Eggdrop in terminal mode.

    +
  • +
+
+
+

Modules

+

While most 3rd party modules that worked on Eggdrop v1.6/v1.8 should still work with Eggdrop v1.9, many of them contain a version check that only allows them to run on 1.6.x bots. We have removed the version check from some of the more popular modules provide them at ftp://eggheads.org/pub/eggdrop/modules/1.9/

+
+
+

Scripts

+

All 3rd party Tcl scripts that work with Eggdrop v1.6/v1.8 should fully work with Eggdrop v1.9.

+
+
+

Botnet

+

In Eggdrop v1.8, Eggdrop bots would automatically attempt to upgrade any botnet link to an SSL/TLS connection. In v1.9, the user is required to explicitly request an SSL/TLS connection by prefixing the port with a ‘+’. If you wish your botnet to take advantage of encryption, use the .chaddr command to update your ports to start with a ‘+’.

+
+
+

Tcl Commands

+

A lot of additions and changes have been made to Tcl commands. Please look at doc/tcl-commands.doc to see them.

+
+
+

Documentation

+

Documentation has been updated to reflect new and removed commands and variables. Almost all files have changed, so take a look at them.

+
+
+
+ + +
+
+
+
+
+
+
+ + + + + \ No newline at end of file diff --git a/doc/html/mainDocs/ircv3.html b/doc/html/mainDocs/ircv3.html new file mode 100644 index 000000000..543f49859 --- /dev/null +++ b/doc/html/mainDocs/ircv3.html @@ -0,0 +1,188 @@ + + + + + + + + IRCv3 support — Eggdrop 1.9.2 documentation + + + + + + + + + + + + + +
+
+ +
+ +
+
+
+ +

IRCv3 support +Last revised: Jun 20, 2021

+
+

IRCv3 support

+

This document provides information about IRCv3 capabilities, as defined via specifications documented by the IRCv3 working group (https://ircv3.net/). Support for some of these specifications was added starting with version 1.9.0, and more capabilites are added as possible with new versions.

+
+

About

+

As more and more IRC servers began to develop and implement their own versions of the IRC protocol (generally defined in RFC1459 and RFC2812), a working group comprised of server, client, and bot developers decided to work together to document these features to make their implementation defined and standardized across servers. What emerged was the IRCv3 set of standards. The specifications developed by the IRCv3 working group was designed to be backwards compatible and are generally implemented via a CAP (capability) request sent at the initialization of an IRC session. A client can optinoally request these “extra” capabilities be enabled through the CAP request, with the assumption that the client can then support the capability requested and enabled. Not all servers or clients support the same capabilites, a general support list can be via the appropriate support table link at https://ircv3.net/.

+
+
+

Usage

+

Within eggdrop.conf, several common IRCv3-defined capabilities are enabled simply changing their setting to ‘1’. Other capabilities without explicit settings in eggdrop.conf may be requested by adding them in a space-separated list to the cap-request setting. For more information on what a specific IRCv3-defined capability does, please consult https://ircv3.net/irc/.

+
+
+

Supported CAP capabilities

+

The following capabilites are supported by Eggdrop:

+
+
    +
  • CAP requests
  • +
  • SASL 3.1
  • +
  • account-notify
  • +
  • account-tag
  • +
  • away-notify
  • +
  • chghost
  • +
  • echo-message
  • +
  • extended-join
  • +
  • invite-notify
  • +
  • message-tags
  • +
  • server-time
  • +
  • setname
  • +
  • +typing
  • +
+
+

Copyright (C) 2010 - 2021 Eggheads Development Team

+
+
+ + +
+
+
+
+
+
+
+ + + + + \ No newline at end of file diff --git a/doc/sphinx_source/conf.py b/doc/sphinx_source/conf.py index ded8b372f..c897e3e2f 100644 --- a/doc/sphinx_source/conf.py +++ b/doc/sphinx_source/conf.py @@ -51,9 +51,9 @@ # built documents. # # The short X.Y version. -version = '1.9.1' +version = '1.9.2' # The full version, including alpha/beta/rc tags. -release = '1.9.1' +release = '1.9.2' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/doc/sphinx_source/installAndSetup/index.rst b/doc/sphinx_source/installAndSetup/index.rst index cf24258ec..956d1d8c4 100644 --- a/doc/sphinx_source/installAndSetup/index.rst +++ b/doc/sphinx_source/installAndSetup/index.rst @@ -11,3 +11,4 @@ Contents: readme.rst install.rst faq.rst + upgrading.rst diff --git a/doc/sphinx_source/installAndSetup/upgrading.rst b/doc/sphinx_source/installAndSetup/upgrading.rst new file mode 100644 index 000000000..26bd1a15f --- /dev/null +++ b/doc/sphinx_source/installAndSetup/upgrading.rst @@ -0,0 +1,82 @@ +********* +Upgrading +********* +Last revised: November 27, 2021 + +######################################## +Upgrading Eggdrop from v1.6/v1.8 -> v1.9 +######################################## + + What's new? To gain a full understanding of changes to the Eggdrop + v1.9 version line, you can read the following documents: + + INSTALL + README + doc/TLS + doc/IPV6 + doc/Changes1.9 + doc/tcl-commands.doc + + All of these documents combined will fill you in on the latest changes to + Eggdrop in version 1.9.x. All files, with the exception of Changes1.9, are + also available in html format in doc/html/. + + For support, feel free to visit us on Libera #eggdrop. + + If you are upgrading from a pre-1.6 version of Eggdrop: + + 1. Before you start the bot for the first time, BACKUP your userfile. + + 2. DON'T USE YOUR OLD CONFIG FILE. MAKE A NEW ONE! + +###################################################### +Must-read changes made to Eggdrop v1.9 from Eggdrop1.8 +###################################################### + +These are NOT all changes or new settings; rather just the "killer" changes that may directly affect Eggdrop's previous performance without modification. + +Config +****** + +To migrate from a 1.8 to a 1.9 Eggdrop, some changes are suggested to be made in your configuration file: + +* Eggdrop has deprecated the blowfish module for password hashing in favor of the PBKDF2 module. This is a BIG change which, if done carelessly, has the potential to render stored passwords useless. Please see doc/PBKDF2 for information on how to properly migrate your userfiles and passwords to the new module. +* Eggdrop 1.9 switched from the "set servers {}" syntax to the "server add" command. For example, if your configuration file previously had:: + + set servers { + my.server.com:6667 + } + + you should now instead use:: + + server add my.server.com 6667 + + Please read the config file for additional examples + +* Eggdrop no longer requires the '-n' flag to start Eggdrop in terminal mode. + + +Modules +******* + +While most 3rd party modules that worked on Eggdrop v1.6/v1.8 should still work with Eggdrop v1.9, many of them contain a version check that only allows them to run on 1.6.x bots. We have removed the version check from some of the more popular modules provide them at ``_ + +Scripts +******* + +All 3rd party Tcl scripts that work with Eggdrop v1.6/v1.8 should fully work with Eggdrop v1.9. + +Botnet +****** + +In Eggdrop v1.8, Eggdrop bots would automatically attempt to upgrade any botnet link to an SSL/TLS connection. In v1.9, the user is required to explicitly request an SSL/TLS connection by prefixing the port with a '+'. If you wish your botnet to take advantage of encryption, use the .chaddr command to update your ports to start with a '+'. + +Tcl Commands +************ + +A lot of additions and changes have been made to Tcl commands. Please look at doc/tcl-commands.doc to see them. + +Documentation +************* + +Documentation has been updated to reflect new and removed commands and variables. Almost all files have changed, so take a look at them. diff --git a/doc/sphinx_source/mainDocs/ircv3.rst b/doc/sphinx_source/mainDocs/ircv3.rst index a7ba7ca37..0f85fb86e 100644 --- a/doc/sphinx_source/mainDocs/ircv3.rst +++ b/doc/sphinx_source/mainDocs/ircv3.rst @@ -1,5 +1,5 @@ IRCv3 support -Last revised: Jun 20, 2021 +Last revised: November 27, 2021 ============= IRCv3 support @@ -26,16 +26,19 @@ Supported CAP capabilities The following capabilites are supported by Eggdrop: - * CAP requests - * SASL 3.1 + * CAP/CAP 302 requests + * SASL 3.2 * account-notify * account-tag * away-notify + * BOT 005 mode + * cap-notify * chghost * echo-message * extended-join * invite-notify * message-tags + * Monitor * server-time * setname * +typing From fafef0e6e131fc027964ce20d144ae93f0b38b72 Mon Sep 17 00:00:00 2001 From: Geo Date: Sat, 27 Nov 2021 18:53:35 -0500 Subject: [PATCH 007/201] Generate 1.9.2 docs --- FEATURES | 6 +- README | 74 +++--------- doc/IRCv3 | 9 +- doc/TRICKS | 9 +- doc/TWITCH | 10 +- doc/html/_static/documentation_options.js | 2 +- doc/html/appendices/first-script.html | 8 +- doc/html/appendices/index.html | 8 +- doc/html/appendices/known-probs.html | 8 +- doc/html/appendices/text-sub.html | 8 +- doc/html/appendices/tricks.html | 16 ++- doc/html/appendices/weird-msgs.html | 8 +- doc/html/coreDocs/assoc.html | 8 +- doc/html/coreDocs/blowfish.html | 8 +- doc/html/coreDocs/channels.html | 8 +- doc/html/coreDocs/compress.html | 8 +- doc/html/coreDocs/console.html | 8 +- doc/html/coreDocs/core.html | 8 +- doc/html/coreDocs/ctcp.html | 8 +- doc/html/coreDocs/dns.html | 8 +- doc/html/coreDocs/filesys.html | 8 +- doc/html/coreDocs/ident.html | 8 +- doc/html/coreDocs/index.html | 14 ++- doc/html/coreDocs/irc.html | 8 +- doc/html/coreDocs/modules.html | 8 +- doc/html/coreDocs/notes.html | 8 +- doc/html/coreDocs/pbkdf2.html | 8 +- doc/html/coreDocs/seen.html | 8 +- doc/html/coreDocs/server.html | 8 +- doc/html/coreDocs/share.html | 8 +- doc/html/coreDocs/transfer.html | 8 +- doc/html/coreDocs/twitch.html | 8 +- doc/html/coreDocs/uptime.html | 8 +- doc/html/coreDocs/woobie.html | 8 +- doc/html/firstinstall/firstinstall.html | 42 +++---- doc/html/firstinstall/index.html | 8 +- doc/html/index.html | 10 +- doc/html/installAndSetup/faq.html | 14 ++- doc/html/installAndSetup/index.html | 9 +- doc/html/installAndSetup/install.html | 8 +- doc/html/installAndSetup/readme.html | 68 ++++------- doc/html/mainDocs/about.html | 8 +- doc/html/mainDocs/bans.html | 8 +- doc/html/mainDocs/botnet.html | 8 +- doc/html/mainDocs/features.html | 12 +- doc/html/mainDocs/index.html | 20 +++- doc/html/mainDocs/ipv6.html | 8 +- doc/html/mainDocs/ircv3.html | 15 +-- doc/html/mainDocs/partyline.html | 8 +- doc/html/mainDocs/patch.html | 8 +- doc/html/mainDocs/pbkdf2.html | 8 +- doc/html/mainDocs/tcl-commands.html | 65 ++++++++--- doc/html/mainDocs/tls.html | 14 ++- doc/html/mainDocs/twitch-tcl-commands.html | 40 +++++-- doc/html/mainDocs/twitch.html | 12 +- doc/html/mainDocs/users.html | 8 +- doc/html/objects.inv | Bin 1256 -> 1284 bytes doc/html/search.html | 8 +- doc/html/searchindex.js | 2 +- doc/tcl-commands.doc | 126 +++++++++++++++++---- 60 files changed, 530 insertions(+), 355 deletions(-) diff --git a/FEATURES b/FEATURES index 027ced16c..cb53551d4 100644 --- a/FEATURES +++ b/FEATURES @@ -7,8 +7,10 @@ Eggdrop Features still regularly updated. Some of its features include: - Capability (CAP) support used to enable IRCv3 features. Eggdrop - currently supports the following IRCv3 capability sets: SASL - authentication, message tags, away-notify, and message-notify. + currently supports the following IRCv3 capability sets: + acconut-notify, account-tag, away-notify, chghost, echo-message, + extended-join, invite-notify, message-tags, server-time, + setname, and +typing. - Support for SSL-enabled IRC servers - Support for IPv6 users - Completely separate channel user lists like having a separate diff --git a/README b/README index 9cc5721f4..79084fa15 100644 --- a/README +++ b/README @@ -50,10 +50,8 @@ WHAT IS EGGDROP? This README file contains information about how to get Eggdrop, command line options for Eggdrop, what you may need to do when upgrading from older versions, a list of frequently asked questions, - how to set up a crontab, some boring legal stuff, info about the - mailing list (a great place to ask questions and a good place to - report bugs), some basics about git usage and some channels where you - might get help with Eggdrop. + how to set up a crontab, some boring legal stuff, some basics about + git usage and some channels where you might get help with Eggdrop. HOW TO GET EGGDROP @@ -105,35 +103,6 @@ QUICK STARTUP UPGRADING -UPGRADING FROM A PRE-1.3 TO A 1.9 VERSION - - First of all, why are you still running pre-1.3?! - - MAKE SURE YOU BACK UP YOUR USERFILE AND CHANFILE! - - We can't stress this enough. If you are upgrading and you have even a - slight possibility of downgrading again later, you will HAVE to back - up your userfile or you will lose it. v1.3 of Eggdrop radically - changed a lot of things. - - There are many major changes between v0.9, v1.0, v1.1 and v1.8, so PAY - ATTENTION to this part if you have a v0.9, 1.0 or 1.1 bot currently. - If you're just starting out, you can skip this section. - - If you run share bots, you will need to upgrade them all at the same - time because of the new userfile format. Older bots will be able to - link in, but will not get or send a userfile. MAKE A NEW CONFIG FILE - from the example; there are some radical changes. - - If you are upgrading from 0.9/1.0 to 1.9, just redo the whole thing. - Absolutely everything has changed, including the userfile and config - file formats. - - If you are upgrading from 1.1/1.2 to 1.9, you will likely want to redo - the config file, as much has changed. BACK UP! You will need to run - 'tclsh scripts/weed/ c' to convert your userfile from v3 - (1.1/1.2) to v4 (1.3/1.4/1.5/1.6/1.8/1.9). - UPGRADING FROM AN OLDER 1.3/1.4/1.5/1.6/1.8 TO A 1.9 VERSION If you followed the INSTALL file and did a 'make install' (or 'make @@ -162,20 +131,12 @@ COMMAND LINE The options available are: - -n: Don't background. Normally, Eggdrop will move itself into the - - background when you start it up, meaning you'll get another - shell prompt and you can do other things while the bot is - running. With -n, you won't return to the shell prompt until the - bot exits (which won't normally happen until it's killed). By - default, -n will send all log entries to the console. - - -nt: Don't background, use terminal. This is just like -n, except that + -t: Don't background, use terminal. This is just like -n, except that instead of seeing log entries, your console will simulate a DCC chat with the bot. - -nc: Don't background, show channel info. This is just like -n, except + -c: Don't background, show channel info. This is just like -n, except that instead of seeing log entries, every 10 seconds your screen will clear and you will see the current channel status, sort of @@ -289,12 +250,13 @@ BORING LEGAL STUFF MAILING LIST There are currently a couple of mailing lists about Eggdrop. - eggheads@eggheads.org is the one relevant for posts about Eggdrop 1.8 + eggheads@eggheads.org is the one relevant for posts about Eggdrop 1.9 and up (suggestions, help, etc). To subscribe to the eggheads mailing list, send email to eggheads-request@eggheads.org. In the body of the message, put - "subscribe eggheads". You can also go to the following url: + "subscribe eggheads". We commonly use this list to announce new + releases.You can also go to the following url: http://lists.eggheads.org/mailman/listinfo/eggheads @@ -325,25 +287,26 @@ MAILING LIST amazing problems that even stump the gurus, etc. are what we want to see here. - Bug reports should be sent to bugs@eggheads.org. Please read and fill - out the doc/BUG-REPORT file. + Bug reports should be generated in the issue section of + https://www.github.com/eggheads/eggdrop DO NOT SEND HTML EMAILS TO ANY OF THE EGGHEADS.ORG MAILING LISTS. - ANYONE CAUGHT SENDING HTML EMAILS TO ONE OF THESE LISTS WILL BE - REMOVED IMMEDIATELY! + ANYONE SENDING HTML EMAILS TO ONE OF THESE LISTS WILL BE REMOVED + IMMEDIATELY! DOCUMENTATION We're trying to keep the documentation up to date. If you feel that anything is missing here or that anything should be added, etc, please - email bugs@eggheads.org about it. Thank you! + create an issue, or better yet a pull request, at + https://www.github.com/eggheads/eggdrop Thank you! OBTAINING HELP You can obtain help with Eggdrop in the following IRC channels: - - FreeNode - #eggdrop (official channel), #eggheads (development - discussion), #egghelp + - Libera Chat - #eggdrop (official channel), #eggheads + (development discussion) - DALnet - #eggdrop - EFnet - #egghelp - IRCnet - #eggdrop @@ -356,10 +319,9 @@ OBTAINING HELP - Don't type using CAPITAL letters, colors or bold. - Don't use "!" and "?" excessively. - Don't /msg people without their permission. - - Don't repeat or paste large amounts of text to the channel. - - If there are any other serious Eggdrop related channels that should be - added to the above list, please let us know. + - Don't repeat or paste more than 4 lines of text to the channel. + - Don't ask to ask- just state your question, along with any + relevant details and error messages Copyright (C) 1997 Robey Pointer Copyright (C) 1999 - 2021 Eggheads Development Team diff --git a/doc/IRCv3 b/doc/IRCv3 index b82fb2221..46d6394d6 100644 --- a/doc/IRCv3 +++ b/doc/IRCv3 @@ -1,4 +1,4 @@ -IRCv3 support Last revised: Jun 20, 2021 +IRCv3 support Last revised: November 27, 2021 IRCv3 support @@ -37,16 +37,19 @@ SUPPORTED CAP CAPABILITIES The following capabilites are supported by Eggdrop: - - CAP requests - - SASL 3.1 + - CAP/CAP 302 requests + - SASL 3.2 - account-notify - account-tag - away-notify + - BOT 005 mode + - cap-notify - chghost - echo-message - extended-join - invite-notify - message-tags + - Monitor - server-time - setname - +typing diff --git a/doc/TRICKS b/doc/TRICKS index ef6823f5a..cf3407068 100644 --- a/doc/TRICKS +++ b/doc/TRICKS @@ -1,4 +1,4 @@ -Eggdrop Tricks Last revised: December 08, 2003 +Eggdrop Tricks Last revised: Jun 02, 2021 Eggdrop Tricks @@ -20,6 +20,13 @@ Eggdrop Tricks bot's config file to make it keeping one logfile all the time. This is not recommended on high traffic channels. + - Because of how traditional IRC works, Eggdrop doesn't capture + outgoing messages to its logfile. However, if the server you are + on supports the IRCv3 capability "echo-message", you can request + this capability to be enabled by the server in your config file. + This will cause the server to send Eggdrop'd public messages back, + thereby allowing those messages to be logged. + - You can modify Eggdrop's output in the partyline, kick messages, and other texts by editing core.english.lang in the language directory. diff --git a/doc/TWITCH b/doc/TWITCH index 9a3bcf7e5..c989e8748 100644 --- a/doc/TWITCH +++ b/doc/TWITCH @@ -36,14 +36,14 @@ REGISTERING WITH TWITCH EDITING THE CONFIG FILE -1. Find addserver options in the server section of the config file. - Remove the sample servers listed and add the following line in their - place, replacing the alphanumeric string after 'oauth:' with the - token you created when registering with Twitch in the previous +1. Find the options to add a server in the server section of the config + file. Remove the sample servers listed and add the following line in + their place, replacing the alphanumeric string after 'oauth:' with + the token you created when registering with Twitch in the previous section. Pretending your Twitch token from the previous step is 'j9irk4vs28b0obz9easys4w2ystji3u', it should look like this: - addserver irc.chat.twitch.tv 6667 oauth:j9irk4vs28b0obz9easys4w2ystji3u + server add irc.chat.twitch.tv 6667 oauth:j9irk4vs28b0obz9easys4w2ystji3u Make sure you leave the 'oauth:' there, including the ':'. diff --git a/doc/html/_static/documentation_options.js b/doc/html/_static/documentation_options.js index 34b17e258..7d0c523e6 100644 --- a/doc/html/_static/documentation_options.js +++ b/doc/html/_static/documentation_options.js @@ -1,6 +1,6 @@ var DOCUMENTATION_OPTIONS = { URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '1.9.1', + VERSION: '1.9.2', LANGUAGE: 'None', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', diff --git a/doc/html/appendices/first-script.html b/doc/html/appendices/first-script.html index 57a1ef8bd..f115e6d8f 100644 --- a/doc/html/appendices/first-script.html +++ b/doc/html/appendices/first-script.html @@ -6,7 +6,7 @@ - Your First Eggdrop Script — Eggdrop 1.9.1 documentation + Your First Eggdrop Script — Eggdrop 1.9.2 documentation @@ -23,7 +23,7 @@

+ href="../index.html">Eggdrop 1.9.2 documentation diff --git a/doc/html/appendices/index.html b/doc/html/appendices/index.html index 831c8b60b..b7ce7b164 100644 --- a/doc/html/appendices/index.html +++ b/doc/html/appendices/index.html @@ -6,7 +6,7 @@ - <no title> — Eggdrop 1.9.1 documentation + <no title> — Eggdrop 1.9.2 documentation @@ -24,7 +24,7 @@

+ href="../index.html">Eggdrop 1.9.2 documentation diff --git a/doc/html/appendices/known-probs.html b/doc/html/appendices/known-probs.html index d910e3d15..67a0a4695 100644 --- a/doc/html/appendices/known-probs.html +++ b/doc/html/appendices/known-probs.html @@ -6,7 +6,7 @@ - Known Problems — Eggdrop 1.9.1 documentation + Known Problems — Eggdrop 1.9.2 documentation @@ -24,7 +24,7 @@

+ href="../index.html">Eggdrop 1.9.2 documentation diff --git a/doc/html/appendices/text-sub.html b/doc/html/appendices/text-sub.html index 8cb428220..6f2bb35b3 100644 --- a/doc/html/appendices/text-sub.html +++ b/doc/html/appendices/text-sub.html @@ -6,7 +6,7 @@ - Textfile Substitutions — Eggdrop 1.9.1 documentation + Textfile Substitutions — Eggdrop 1.9.2 documentation @@ -24,7 +24,7 @@

+ href="../index.html">Eggdrop 1.9.2 documentation diff --git a/doc/html/appendices/tricks.html b/doc/html/appendices/tricks.html index 2ad0d0eba..f4f06f571 100644 --- a/doc/html/appendices/tricks.html +++ b/doc/html/appendices/tricks.html @@ -6,7 +6,7 @@ - Eggdrop Tricks — Eggdrop 1.9.1 documentation + Eggdrop Tricks — Eggdrop 1.9.2 documentation @@ -24,7 +24,7 @@

+ href="../index.html">Eggdrop 1.9.2 documentation diff --git a/doc/html/coreDocs/assoc.html b/doc/html/coreDocs/assoc.html index 311ead7d1..e1f1fa4ea 100644 --- a/doc/html/coreDocs/assoc.html +++ b/doc/html/coreDocs/assoc.html @@ -6,7 +6,7 @@ - Assoc Module — Eggdrop 1.9.1 documentation + Assoc Module — Eggdrop 1.9.2 documentation @@ -24,7 +24,7 @@

+ href="../index.html">Eggdrop 1.9.2 documentation diff --git a/doc/html/coreDocs/blowfish.html b/doc/html/coreDocs/blowfish.html index 7a3eedef3..6251a1419 100644 --- a/doc/html/coreDocs/blowfish.html +++ b/doc/html/coreDocs/blowfish.html @@ -6,7 +6,7 @@ - Blowfish Module — Eggdrop 1.9.1 documentation + Blowfish Module — Eggdrop 1.9.2 documentation @@ -24,7 +24,7 @@

+ href="../index.html">Eggdrop 1.9.2 documentation diff --git a/doc/html/coreDocs/channels.html b/doc/html/coreDocs/channels.html index f75dc4261..a2f760569 100644 --- a/doc/html/coreDocs/channels.html +++ b/doc/html/coreDocs/channels.html @@ -6,7 +6,7 @@ - Channels Module — Eggdrop 1.9.1 documentation + Channels Module — Eggdrop 1.9.2 documentation @@ -24,7 +24,7 @@

+ href="../index.html">Eggdrop 1.9.2 documentation diff --git a/doc/html/coreDocs/compress.html b/doc/html/coreDocs/compress.html index 71c1d5af0..3198c59fd 100644 --- a/doc/html/coreDocs/compress.html +++ b/doc/html/coreDocs/compress.html @@ -6,7 +6,7 @@ - Compress Module — Eggdrop 1.9.1 documentation + Compress Module — Eggdrop 1.9.2 documentation @@ -24,7 +24,7 @@

+ href="../index.html">Eggdrop 1.9.2 documentation diff --git a/doc/html/coreDocs/console.html b/doc/html/coreDocs/console.html index dbd462ce1..a153136b5 100644 --- a/doc/html/coreDocs/console.html +++ b/doc/html/coreDocs/console.html @@ -6,7 +6,7 @@ - Console Module — Eggdrop 1.9.1 documentation + Console Module — Eggdrop 1.9.2 documentation @@ -24,7 +24,7 @@

+ href="../index.html">Eggdrop 1.9.2 documentation diff --git a/doc/html/coreDocs/core.html b/doc/html/coreDocs/core.html index 96e522e53..bd2ad60db 100644 --- a/doc/html/coreDocs/core.html +++ b/doc/html/coreDocs/core.html @@ -6,7 +6,7 @@ - Eggdrop Core Settings — Eggdrop 1.9.1 documentation + Eggdrop Core Settings — Eggdrop 1.9.2 documentation @@ -24,7 +24,7 @@

+ href="../index.html">Eggdrop 1.9.2 documentation diff --git a/doc/html/coreDocs/ctcp.html b/doc/html/coreDocs/ctcp.html index c7e3dd2c4..b4f95b16e 100644 --- a/doc/html/coreDocs/ctcp.html +++ b/doc/html/coreDocs/ctcp.html @@ -6,7 +6,7 @@ - CTCP Module — Eggdrop 1.9.1 documentation + CTCP Module — Eggdrop 1.9.2 documentation @@ -24,7 +24,7 @@

+ href="../index.html">Eggdrop 1.9.2 documentation diff --git a/doc/html/coreDocs/dns.html b/doc/html/coreDocs/dns.html index 0cc5afc6a..fd1f704eb 100644 --- a/doc/html/coreDocs/dns.html +++ b/doc/html/coreDocs/dns.html @@ -6,7 +6,7 @@ - DNS Module — Eggdrop 1.9.1 documentation + DNS Module — Eggdrop 1.9.2 documentation @@ -24,7 +24,7 @@

+ href="../index.html">Eggdrop 1.9.2 documentation diff --git a/doc/html/coreDocs/filesys.html b/doc/html/coreDocs/filesys.html index 73231ac0a..ffc8b8456 100644 --- a/doc/html/coreDocs/filesys.html +++ b/doc/html/coreDocs/filesys.html @@ -6,7 +6,7 @@ - Filesys Module — Eggdrop 1.9.1 documentation + Filesys Module — Eggdrop 1.9.2 documentation @@ -24,7 +24,7 @@

+ href="../index.html">Eggdrop 1.9.2 documentation diff --git a/doc/html/coreDocs/ident.html b/doc/html/coreDocs/ident.html index f327f1852..aeec77fb7 100644 --- a/doc/html/coreDocs/ident.html +++ b/doc/html/coreDocs/ident.html @@ -6,7 +6,7 @@ - Ident Module — Eggdrop 1.9.1 documentation + Ident Module — Eggdrop 1.9.2 documentation @@ -24,7 +24,7 @@

+ href="../index.html">Eggdrop 1.9.2 documentation diff --git a/doc/html/coreDocs/index.html b/doc/html/coreDocs/index.html index b89009f4d..32fa2e68b 100644 --- a/doc/html/coreDocs/index.html +++ b/doc/html/coreDocs/index.html @@ -6,7 +6,7 @@ - <no title> — Eggdrop 1.9.1 documentation + <no title> — Eggdrop 1.9.2 documentation @@ -16,7 +16,7 @@ - + diff --git a/doc/html/coreDocs/notes.html b/doc/html/coreDocs/notes.html index 8c35efa4a..19d86fc71 100644 --- a/doc/html/coreDocs/notes.html +++ b/doc/html/coreDocs/notes.html @@ -6,7 +6,7 @@ - Notes Module — Eggdrop 1.9.1 documentation + Notes Module — Eggdrop 1.9.2 documentation @@ -24,7 +24,7 @@

+ href="../index.html">Eggdrop 1.9.2 documentation diff --git a/doc/html/coreDocs/pbkdf2.html b/doc/html/coreDocs/pbkdf2.html index ce9e4a719..4f9531fbb 100644 --- a/doc/html/coreDocs/pbkdf2.html +++ b/doc/html/coreDocs/pbkdf2.html @@ -6,7 +6,7 @@ - PBKDF2 Module — Eggdrop 1.9.1 documentation + PBKDF2 Module — Eggdrop 1.9.2 documentation @@ -24,7 +24,7 @@

+ href="../index.html">Eggdrop 1.9.2 documentation diff --git a/doc/html/coreDocs/seen.html b/doc/html/coreDocs/seen.html index 64b27a766..eb15b3894 100644 --- a/doc/html/coreDocs/seen.html +++ b/doc/html/coreDocs/seen.html @@ -6,7 +6,7 @@ - Seen Module — Eggdrop 1.9.1 documentation + Seen Module — Eggdrop 1.9.2 documentation @@ -24,7 +24,7 @@

+ href="../index.html">Eggdrop 1.9.2 documentation diff --git a/doc/html/coreDocs/server.html b/doc/html/coreDocs/server.html index fb464f1d6..fbf30ae6c 100644 --- a/doc/html/coreDocs/server.html +++ b/doc/html/coreDocs/server.html @@ -6,7 +6,7 @@ - Server Module — Eggdrop 1.9.1 documentation + Server Module — Eggdrop 1.9.2 documentation @@ -24,7 +24,7 @@

+ href="../index.html">Eggdrop 1.9.2 documentation diff --git a/doc/html/coreDocs/share.html b/doc/html/coreDocs/share.html index 424ae880b..3453f0671 100644 --- a/doc/html/coreDocs/share.html +++ b/doc/html/coreDocs/share.html @@ -6,7 +6,7 @@ - Share Module — Eggdrop 1.9.1 documentation + Share Module — Eggdrop 1.9.2 documentation @@ -24,7 +24,7 @@

+ href="../index.html">Eggdrop 1.9.2 documentation diff --git a/doc/html/coreDocs/transfer.html b/doc/html/coreDocs/transfer.html index e09621e8e..46d2a9490 100644 --- a/doc/html/coreDocs/transfer.html +++ b/doc/html/coreDocs/transfer.html @@ -6,7 +6,7 @@ - Transfer Module — Eggdrop 1.9.1 documentation + Transfer Module — Eggdrop 1.9.2 documentation @@ -24,7 +24,7 @@

+ href="../index.html">Eggdrop 1.9.2 documentation diff --git a/doc/html/coreDocs/twitch.html b/doc/html/coreDocs/twitch.html index 0b57bc32f..d5bd3543a 100644 --- a/doc/html/coreDocs/twitch.html +++ b/doc/html/coreDocs/twitch.html @@ -6,7 +6,7 @@ - Twitch Module — Eggdrop 1.9.1 documentation + Twitch Module — Eggdrop 1.9.2 documentation @@ -24,7 +24,7 @@

+ href="../index.html">Eggdrop 1.9.2 documentation diff --git a/doc/html/coreDocs/uptime.html b/doc/html/coreDocs/uptime.html index 3d0f035b2..7d65daa89 100644 --- a/doc/html/coreDocs/uptime.html +++ b/doc/html/coreDocs/uptime.html @@ -6,7 +6,7 @@ - Uptime Module — Eggdrop 1.9.1 documentation + Uptime Module — Eggdrop 1.9.2 documentation @@ -24,7 +24,7 @@

+ href="../index.html">Eggdrop 1.9.2 documentation diff --git a/doc/html/coreDocs/woobie.html b/doc/html/coreDocs/woobie.html index 53df8661c..aacb6bac9 100644 --- a/doc/html/coreDocs/woobie.html +++ b/doc/html/coreDocs/woobie.html @@ -6,7 +6,7 @@ - Woobie Module — Eggdrop 1.9.1 documentation + Woobie Module — Eggdrop 1.9.2 documentation @@ -24,7 +24,7 @@

+ href="../index.html">Eggdrop 1.9.2 documentation diff --git a/doc/html/firstinstall/firstinstall.html b/doc/html/firstinstall/firstinstall.html index 0c93df330..c50988ed1 100644 --- a/doc/html/firstinstall/firstinstall.html +++ b/doc/html/firstinstall/firstinstall.html @@ -6,7 +6,7 @@ - Setting up your Eggdrop the first time — Eggdrop 1.9.1 documentation + Setting up your Eggdrop the first time — Eggdrop 1.9.2 documentation @@ -22,7 +22,7 @@

+ href="../index.html">Eggdrop 1.9.2 documentation @@ -37,6 +37,7 @@

Table of Contents

  • README
  • Installing Eggdrop
  • Frequently Asked Questions
  • +
  • Upgrading
  • +
  • Account tracking in Eggdrop +
  • Encryption/Hashing
    • Background
    • Usage
    • @@ -365,7 +375,7 @@

      Where to find more help © Copyright 2022, Eggheads. - Last updated on Jul 12, 2022. + Last updated on Nov 10, 2022. Created using Sphinx 1.8.5. diff --git a/doc/html/install/install.html b/doc/html/install/install.html index d05e0b2f1..d6ce5d245 100644 --- a/doc/html/install/install.html +++ b/doc/html/install/install.html @@ -6,7 +6,7 @@ - Installing Eggdrop — Eggdrop 1.9.2 documentation + Installing Eggdrop — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

      + href="../index.html">Eggdrop 1.9.4 documentation -

      Note that you must use full path for every file to be correctly +

      Note that you must use full path for every file to be correctly installed.

      -

      [The following is performed from the directory installed above.]

      @@ -183,6 +183,9 @@

      Quick Startup
    • Edit your config file completely.

    • Start the bot with the “-m” option to create a user file, i.e.

      @@ -281,7 +284,7 @@

      Modules © Copyright 2022, Eggheads. - Last updated on May 26, 2022. + Last updated on Nov 10, 2022. Created using Sphinx 1.8.5. diff --git a/doc/html/install/readme.html b/doc/html/install/readme.html index 6e356c9d3..24d2c1630 100644 --- a/doc/html/install/readme.html +++ b/doc/html/install/readme.html @@ -6,7 +6,7 @@ - README — Eggdrop 1.9.2 documentation + README — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

      + href="../index.html">Eggdrop 1.9.4 documentation diff --git a/doc/html/install/upgrading.html b/doc/html/install/upgrading.html index 3ad768398..7a2842f4b 100644 --- a/doc/html/install/upgrading.html +++ b/doc/html/install/upgrading.html @@ -6,7 +6,7 @@ - Upgrading Eggdrop — Eggdrop 1.9.2 documentation + Upgrading Eggdrop — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

      + href="../index.html">Eggdrop 1.9.4 documentation diff --git a/doc/html/modules/included.html b/doc/html/modules/included.html index 8101520c8..edffbdbbc 100644 --- a/doc/html/modules/included.html +++ b/doc/html/modules/included.html @@ -6,7 +6,7 @@ - Modules included with Eggdrop — Eggdrop 1.9.3 documentation + Modules included with Eggdrop — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

      + href="../index.html">Eggdrop 1.9.4 documentation diff --git a/doc/html/modules/index.html b/doc/html/modules/index.html index e8c974135..f17d8d8bf 100644 --- a/doc/html/modules/index.html +++ b/doc/html/modules/index.html @@ -6,7 +6,7 @@ - Eggdrop Module Information — Eggdrop 1.9.2 documentation + Eggdrop Module Information — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

      + href="../index.html">Eggdrop 1.9.4 documentation diff --git a/doc/html/modules/mod/assoc.html b/doc/html/modules/mod/assoc.html index c38e68f06..473290a3f 100644 --- a/doc/html/modules/mod/assoc.html +++ b/doc/html/modules/mod/assoc.html @@ -6,7 +6,7 @@ - Assoc Module — Eggdrop 1.9.2 documentation + Assoc Module — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

      + href="../../index.html">Eggdrop 1.9.4 documentation diff --git a/doc/html/modules/mod/blowfish.html b/doc/html/modules/mod/blowfish.html index f077164f4..bd82779ea 100644 --- a/doc/html/modules/mod/blowfish.html +++ b/doc/html/modules/mod/blowfish.html @@ -6,7 +6,7 @@ - Blowfish Module — Eggdrop 1.9.2 documentation + Blowfish Module — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

      + href="../../index.html">Eggdrop 1.9.4 documentation diff --git a/doc/html/modules/mod/channels.html b/doc/html/modules/mod/channels.html index 435e32d85..5b8fb089b 100644 --- a/doc/html/modules/mod/channels.html +++ b/doc/html/modules/mod/channels.html @@ -6,7 +6,7 @@ - Channels Module — Eggdrop 1.9.2 documentation + Channels Module — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

      + href="../../index.html">Eggdrop 1.9.4 documentation diff --git a/doc/html/modules/mod/compress.html b/doc/html/modules/mod/compress.html index 911fbde6e..bde3bc8ae 100644 --- a/doc/html/modules/mod/compress.html +++ b/doc/html/modules/mod/compress.html @@ -6,7 +6,7 @@ - Compress Module — Eggdrop 1.9.2 documentation + Compress Module — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

      + href="../../index.html">Eggdrop 1.9.4 documentation diff --git a/doc/html/modules/mod/console.html b/doc/html/modules/mod/console.html index 8089e6885..bdd760ceb 100644 --- a/doc/html/modules/mod/console.html +++ b/doc/html/modules/mod/console.html @@ -6,7 +6,7 @@ - Console Module — Eggdrop 1.9.2 documentation + Console Module — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

      + href="../../index.html">Eggdrop 1.9.4 documentation diff --git a/doc/html/modules/mod/ctcp.html b/doc/html/modules/mod/ctcp.html index 62562ad04..70f7884ff 100644 --- a/doc/html/modules/mod/ctcp.html +++ b/doc/html/modules/mod/ctcp.html @@ -6,7 +6,7 @@ - CTCP Module — Eggdrop 1.9.2 documentation + CTCP Module — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

      + href="../../index.html">Eggdrop 1.9.4 documentation diff --git a/doc/html/modules/mod/dns.html b/doc/html/modules/mod/dns.html index 75f893bd0..dbdd9a95d 100644 --- a/doc/html/modules/mod/dns.html +++ b/doc/html/modules/mod/dns.html @@ -6,7 +6,7 @@ - DNS Module — Eggdrop 1.9.2 documentation + DNS Module — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

      + href="../../index.html">Eggdrop 1.9.4 documentation diff --git a/doc/html/modules/mod/filesys.html b/doc/html/modules/mod/filesys.html index 055d9b4e4..2ce90adf9 100644 --- a/doc/html/modules/mod/filesys.html +++ b/doc/html/modules/mod/filesys.html @@ -6,7 +6,7 @@ - Filesys Module — Eggdrop 1.9.2 documentation + Filesys Module — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

      + href="../../index.html">Eggdrop 1.9.4 documentation diff --git a/doc/html/modules/mod/ident.html b/doc/html/modules/mod/ident.html index df57f1510..5cfcd7cad 100644 --- a/doc/html/modules/mod/ident.html +++ b/doc/html/modules/mod/ident.html @@ -6,7 +6,7 @@ - Ident Module — Eggdrop 1.9.2 documentation + Ident Module — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

      + href="../../index.html">Eggdrop 1.9.4 documentation diff --git a/doc/html/modules/mod/irc.html b/doc/html/modules/mod/irc.html index 91d7235d0..cd7d05f14 100644 --- a/doc/html/modules/mod/irc.html +++ b/doc/html/modules/mod/irc.html @@ -6,7 +6,7 @@ - IRC Module — Eggdrop 1.9.2 documentation + IRC Module — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

      + href="../../index.html">Eggdrop 1.9.4 documentation
      Many IRCops find bots by seeing if they reply to ‘hello’ in a msg. You -can change this to another word by un-commenting thse two lines and +can change this to another word by un-commenting these two lines and changing “myword” to the word wish to use instead of’hello’. It must be a single word.
      @@ -289,7 +290,7 @@

      Search

      diff --git a/doc/html/modules/mod/notes.html b/doc/html/modules/mod/notes.html index 8365399dd..f27bedad9 100644 --- a/doc/html/modules/mod/notes.html +++ b/doc/html/modules/mod/notes.html @@ -6,7 +6,7 @@ - Notes Module — Eggdrop 1.9.2 documentation + Notes Module — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

      + href="../../index.html">Eggdrop 1.9.4 documentation diff --git a/doc/html/modules/mod/pbkdf2.html b/doc/html/modules/mod/pbkdf2.html index 783d9de0d..b02d7e06e 100644 --- a/doc/html/modules/mod/pbkdf2.html +++ b/doc/html/modules/mod/pbkdf2.html @@ -6,7 +6,7 @@ - PBKDF2 Module — Eggdrop 1.9.3 documentation + PBKDF2 Module — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

      + href="../../index.html">Eggdrop 1.9.4 documentation diff --git a/doc/html/modules/mod/seen.html b/doc/html/modules/mod/seen.html index 81c0da8a8..23b657e19 100644 --- a/doc/html/modules/mod/seen.html +++ b/doc/html/modules/mod/seen.html @@ -6,7 +6,7 @@ - Seen Module — Eggdrop 1.9.3 documentation + Seen Module — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

      + href="../../index.html">Eggdrop 1.9.4 documentation diff --git a/doc/html/modules/mod/server.html b/doc/html/modules/mod/server.html index c1479a6c2..e83a3db20 100644 --- a/doc/html/modules/mod/server.html +++ b/doc/html/modules/mod/server.html @@ -6,7 +6,7 @@ - Server Module — Eggdrop 1.9.3 documentation + Server Module — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

      + href="../../index.html">Eggdrop 1.9.4 documentation diff --git a/doc/html/modules/mod/share.html b/doc/html/modules/mod/share.html index 478c33ec1..2ffb85ec0 100644 --- a/doc/html/modules/mod/share.html +++ b/doc/html/modules/mod/share.html @@ -6,7 +6,7 @@ - Share Module — Eggdrop 1.9.3 documentation + Share Module — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

      + href="../../index.html">Eggdrop 1.9.4 documentation diff --git a/doc/html/modules/mod/transfer.html b/doc/html/modules/mod/transfer.html index f41c5875e..9e2451cf1 100644 --- a/doc/html/modules/mod/transfer.html +++ b/doc/html/modules/mod/transfer.html @@ -6,7 +6,7 @@ - Transfer Module — Eggdrop 1.9.3 documentation + Transfer Module — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

      + href="../../index.html">Eggdrop 1.9.4 documentation diff --git a/doc/html/modules/mod/twitch.html b/doc/html/modules/mod/twitch.html index acf9abca6..c7ad96918 100644 --- a/doc/html/modules/mod/twitch.html +++ b/doc/html/modules/mod/twitch.html @@ -6,7 +6,7 @@ - Twitch Module — Eggdrop 1.9.3 documentation + Twitch Module — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

      + href="../../index.html">Eggdrop 1.9.4 documentation diff --git a/doc/html/modules/mod/uptime.html b/doc/html/modules/mod/uptime.html index 2cc120325..45993ea2a 100644 --- a/doc/html/modules/mod/uptime.html +++ b/doc/html/modules/mod/uptime.html @@ -6,7 +6,7 @@ - Uptime Module — Eggdrop 1.9.3 documentation + Uptime Module — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

      + href="../../index.html">Eggdrop 1.9.4 documentation diff --git a/doc/html/modules/mod/woobie.html b/doc/html/modules/mod/woobie.html index 23d5d7457..b9b05d0a4 100644 --- a/doc/html/modules/mod/woobie.html +++ b/doc/html/modules/mod/woobie.html @@ -6,7 +6,7 @@ - Woobie Module — Eggdrop 1.9.3 documentation + Woobie Module — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

      + href="../../index.html">Eggdrop 1.9.4 documentation diff --git a/doc/html/modules/writing.html b/doc/html/modules/writing.html index 548e573d9..db0584e67 100644 --- a/doc/html/modules/writing.html +++ b/doc/html/modules/writing.html @@ -6,7 +6,7 @@ - Writing an Eggdrop Module — Eggdrop 1.9.3 documentation + Writing an Eggdrop Module — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

      + href="../index.html">Eggdrop 1.9.4 documentation diff --git a/doc/html/objects.inv b/doc/html/objects.inv index a4c3f8558582d0a190975a9a53497a39705f5c8a..769b0721ecbe8dca1923d114d1645a7c5de1f80d 100644 GIT binary patch delta 1174 zcmV;H1Zn%y3I7R@KLIq6Kt6vPHxRt*D+X|mR)jb}4!P|UUf63aEEzcl91bNBJ0b@p zM_T=Tn$IC;n#yHYVs#Z?-NhDZ#&$^e2i$fCw$Nhdqw1!|y>PgFbOFPMK?3v!c|BZtk`O|-I&7F&Vb?~a~ z(HvCfSVk$xW;L4h8L5UkgAg%}YP9wH+u$kU*hzNHW%l0sx81)*inZV9-6iSOeh z-O%9%7tlo9J-kI$CvL15z{q+0v5k~H2mE@276KymIm8G0fe9`;_EGZVs85a;`*FoP zCQN-A2ggZXTx^(P(hq;xmq~{_{oD}I$bpGQ%TZC*y!?Dc*G0*e7bvleM+QpI4IItIfR!$PyLl*XH&z_zswJn=Z9_K(?nWF z61FRKqc#CdHvtD3?g0?ws)y@30)87lI$U~G<%0HO$GZF&=2(AD*G*zvxH+a}Pn=m! z6hM(1(}MO=orvL5tQJOuNtG^DdKBhHHI2fp7G8z9QcbCFt%YY{?o?IE-D}}ph)van zCKsD~*xa$I8qv)PFPm9cjT~Jq_cX-5YV_RQ=H9ljr<%y*U8Qr)YN|>PGy zRl}oR;~yV6)3_*ZW{=Yh3hWREuWae6t0_0pmt@LLcuRkZ{LFF^WoB6k)G{wMBZ|)Y zLq8UC$l-6~U}HnxqO+vTg*o!v&GNOvOBw5!dCpFGic?djT4tWBMSh~(B13^b&rvfP zXv9gc!Pk^FnkqgNu7w6v?|AFrg{onLz9nk$^st9rw?`- zjE(}*2xbroHy(fRxfq+jK54qHG{?Z>=r4-w8AIW)8gJ7F>Hsk#of>)m`M`Z!&Xq5T@#z!O{@a?m+i9`=s< zy0(8vlwu!dt;ZIT2}n2v_+}ffW;?dpaHv#RRubv4WyEIJ7HxU>MsfO%QQUYamhMah zg&z?+KBReE;jaH@`^%u&Dfsfo4#Oe%loPpIpj7^WRTs(VC_YY0VUBkF)}HT zlxO_+X+D}F<)(8P+g)8HitH}-uvSfW!`$D-*#6I6bhRxw$kM=Y)cRu6kaOkxf zR{d%s~1*GNM9vWK#0M)DjSF!Mt` z(rq{1-~yV6yN6d~_43Aw0YuK@_bpQP0`SWXT1-IdbIgzQ1D8Vf{G;S!G!(~+`??Z6 zm$v>G5932#d~STitRH`?FO!aS`nh4UQ6ra)QIqa?^YY`NX_W=8v1}MN@v~GZAY7{d z;c6LM0P{3w{fScw0SN*>p6(vMJtfjK9yIHn9KlOqp#Ds`i$_D~Umil`{!y>+X(p|a zM7@>1(VGCKlYotk=Ku(C)Z=B1KzNOi9Sdg*~Qa&zwa~ z6hKiM^MdwDpO_U&uC9!Tk}6%Q^eD=WY8r)GU3nGdN;RdzwXQsia;K_N?p{~kMc7nb zXm+ushbZ(Nk4=Y_~zOZ2!VgGee3sMY6<}j60i4vKR$nrfrZ<^0>RTqxBZ@voo z2H&Gdr%H>RqvcHX;PT?p-~#rX*-3NaEf6U+o@0MB(#3fG#ET{NDn^=ILDiMp@(upKkJqX`&833kG; zSUY_g-K@I#i<#qmK(-s!Fua}M=!lKZ(Q>nQUFb%KpcMbGYcsWkOhn=?z%Mr@HQT8* zRzO^T!LpLbKrI7DRM%?d=36bgH;UrpankP3Om;B(@5Gp% - Search — Eggdrop 1.9.3 documentation + Search — Eggdrop 1.9.4 documentation @@ -31,7 +31,7 @@

      + href="index.html">Eggdrop 1.9.4 documentation @@ -59,6 +59,7 @@

      Table of Contents

    • IPv6 support
    • TLS support
    • IRCv3 support
    • +
    • Account tracking in Eggdrop
    • Encryption/Hashing
    • Twitch
    • Advanced Tips
    • @@ -146,7 +147,7 @@

      Search

      diff --git a/doc/html/searchindex.js b/doc/html/searchindex.js index 20e288fc4..4857dc0ce 100644 --- a/doc/html/searchindex.js +++ b/doc/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["about/about","about/legal","index","install/install","install/readme","install/upgrading","modules/included","modules/index","modules/mod/assoc","modules/mod/blowfish","modules/mod/channels","modules/mod/compress","modules/mod/console","modules/mod/ctcp","modules/mod/dns","modules/mod/filesys","modules/mod/ident","modules/mod/irc","modules/mod/notes","modules/mod/pbkdf2","modules/mod/seen","modules/mod/server","modules/mod/share","modules/mod/transfer","modules/mod/twitch","modules/mod/uptime","modules/mod/woobie","modules/writing","tutorials/firstscript","tutorials/firststeps","tutorials/setup","tutorials/tlssetup","using/bans","using/botnet","using/core","using/features","using/ipv6","using/ircv3","using/partyline","using/patch","using/pbkdf2info","using/tcl-commands","using/text-sub","using/tls","using/tricks","using/twitch-tcl-commands","using/twitchinfo","using/users"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,sphinx:55},filenames:["about/about.rst","about/legal.rst","index.rst","install/install.rst","install/readme.rst","install/upgrading.rst","modules/included.rst","modules/index.rst","modules/mod/assoc.rst","modules/mod/blowfish.rst","modules/mod/channels.rst","modules/mod/compress.rst","modules/mod/console.rst","modules/mod/ctcp.rst","modules/mod/dns.rst","modules/mod/filesys.rst","modules/mod/ident.rst","modules/mod/irc.rst","modules/mod/notes.rst","modules/mod/pbkdf2.rst","modules/mod/seen.rst","modules/mod/server.rst","modules/mod/share.rst","modules/mod/transfer.rst","modules/mod/twitch.rst","modules/mod/uptime.rst","modules/mod/woobie.rst","modules/writing.rst","tutorials/firstscript.rst","tutorials/firststeps.rst","tutorials/setup.rst","tutorials/tlssetup.rst","using/bans.rst","using/botnet.rst","using/core.rst","using/features.rst","using/ipv6.rst","using/ircv3.rst","using/partyline.rst","using/patch.rst","using/pbkdf2info.rst","using/tcl-commands.rst","using/text-sub.rst","using/tls.rst","using/tricks.rst","using/twitch-tcl-commands.rst","using/twitchinfo.rst","using/users.rst"],objects:{},objnames:{},objtypes:{},terms:{"04may2000":34,"3rd":5,"5c0":[21,30,34],"break":[15,41],"byte":[17,21,23,27,41],"case":[14,19,21,28,30,34,41],"catch":41,"char":[27,34,41],"const":27,"default":[2,3,4,10,11,14,15,17,21,23,29,30,31,32,34,40,41,43],"export":44,"final":[0,4,28,29,30,34,40],"function":[0,1,2,4,6,7,19,24,30,33,34,36,40,41,44,45],"import":[27,28,29,30,34,38,41],"int":27,"long":[6,10,14,18,21,22,32,34,41,42,45],"new":[4,5,7,19,24,28,29,30,34,35,36,37,38,39,40,43,44,46],"null":27,"public":[0,1,4,28,29,31,34,41,43,44,47],"return":[17,27,40,45],"short":[2,27,29,36,43],"static":[2,3,10,27,29,41],"super":2,"switch":[5,27,30,34,41,43,44],"throw":41,"true":28,"try":[3,4,6,7,20,21,25,27,28,29,30,34,45],"var":41,"void":27,"while":[0,4,5,10,16,24,30,32,34,38,40,41,46],AND:[19,30,41],ARE:28,Adding:[2,24,46],And:28,CVS:4,DNS:[2,6,41],DOING:28,For:[1,2,3,5,7,15,21,30,31,33,34,36,37,38,40,41,43,44,45,46],IPs:[29,31,36],NFS:23,NOT:[5,28,30,33,34,41,45],Not:[6,21,29,37],One:[0,4,28,41],THE:3,TLS:[2,3,4,5,29,30,34,41],That:[24,28,30,33,41,47],The:[0,1,2,3,4,5,6,10,11,13,14,15,16,19,21,22,23,24,25,27,28,29,31,32,33,34,35,37,40,41,43,44,45,46,47],Their:36,Then:[5,29,30,43],There:[1,3,4,10,11,12,13,14,15,16,17,18,19,21,22,23,24,27,28,29,31,32,34,36,40,42,43,46,47],These:[5,11,17,27,30,32,33,34,36,42,43,45,47],Use:[16,17,19,21,27,30,34,41],Used:41,Useful:41,Using:[2,4,27,41],WILL:45,With:[0,4,6,15,33,34,40,41,43],YES:7,Yes:7,aaa:41,abcdechannel:41,abil:[2,7,16,31,35,41],abl:[3,6,10,15,17,21,30,34,38,40,41],abort:[23,30,41,43],about:[2,4,6,24,25,27,28,29,34,41,44,46],abov:[1,3,4,10,17,19,27,28,29,35,41,42],absolut:[0,31,41,47],abus:[0,2,4],accept:[15,22,24,31,33,34,41,43,46],access:[0,4,16,21,27,28,29,30,35,38,40,41,43,45,46,47],accomplish:3,accord:[1,41,47],accordingli:21,account:[0,4,16,18,27,29,30,35,37,39,40,46],accur:[41,45],across:[0,4,33,37,39,41,44],act:[16,27,34,35,41,43],action:[28,29,31,34,41],activ:[2,10,16,30,32,38,41,43],actual:[0,4,15,27,28,31,34,38,41],acut:[],add:[3,4,5,7,10,16,17,24,27,28,30,31,33,34,35,40,46],add_builtin:27,add_hook:27,add_tcl_command:27,add_tcl_int:27,add_tcl_str:27,added:[0,3,4,5,19,22,24,28,30,33,34,35,36,37,40,41,43,45],addhost:17,adding:[4,7,21,27,34,35,37,41],addit:[2,4,5,16,21,30,34,41,43,45],addition:[16,30,41],addlang:[34,41],address:[18,22,25,30,33,34,36,43],addus:30,adh:34,adjust:[0,4,17],admin:[34,42],admit:23,advanc:[0,2,4,6,20,28,35],advantag:[5,30,44],advertis:[0,4,41],advis:[3,21,23],affect:[5,10,24,34,35,36,41,46],affet:41,affili:[1,46],after:[3,4,10,16,17,21,27,28,29,32,34,41,43,44,46],afterward:[17,34],again:[6,15,25,27,32,33,34,40,41,45],against:[10,15,19,21,28,30,40,41,45],age:41,aggress:33,aka:34,alarm:41,alert:46,algorithm:[19,40],all:[1,5,6,7,10,13,14,15,17,19,21,22,27,28,29,30,31,32,33,34,35,36,37,38,40,41,43,44,45,46,47],alloc:[27,41],allow:[0,3,4,5,6,7,10,11,15,16,17,18,19,21,22,23,24,27,28,29,30,33,34,35,40,41,43,44,46],alltool:34,almost:[0,4,30,32,47],along:[4,15],alphabet:34,alphanumer:46,alreadi:[10,21,27,28,30,31,33,34,40,41,46],also:[0,2,3,4,7,10,11,12,13,14,15,16,17,18,19,21,22,23,27,28,29,30,32,33,34,35,38,40,41,42,43,44,45,46,47],alt:[21,34],alter:[15,35,41,46],altern:[2,4,16,21,30,31,33,34,41,43],although:[17,30,34,41],altnick:[21,30],altogeth:19,alwai:[0,3,4,10,30,32,34,41],amount:[6,34],anachron:31,ani:[0,1,3,4,5,7,12,15,16,17,18,21,22,24,27,28,29,30,32,34,35,38,40,41,43,45,46,47],annoi:28,anonym:34,anoth:[0,10,15,17,18,21,22,27,30,33,34,41,42,45],another:5,ansi:41,answer:[0,7,13,16,21,28],any_other_funct:27,anymor:[6,9,19,34],anyon:[10,32,41],anyth:[0,4,15,28,29,30,33,34,38,41,45],anywai:34,anywher:[38,41],aol:[28,40],aop:10,apart:[27,34,41],api:6,apostroph:38,appear:[29,30,33,34,41,45],append:[27,41],appli:[30,32,34,40,47],applic:[1,34,41],appreci:31,appropri:[3,5,30,34,37,39,40],april:[24,45],apt:[30,31],arbitrari:41,arbitrarili:45,archiv:4,area:[6,15,34,41,44,47],aren:[30,34,41,44,45],arg:27,argument:[15,17,28,29,36,41,45],around:[0,4,24,31,36,41,46],arriv:41,ascii:41,ask:[4,17,29,30,38,41,43],assign:[33,34,41],assist:[2,30,43],assoc:[2,6],associ:[24,41,46],assum:[21,28,30,31,32,34,41],assumpt:37,assur:45,asynchron:[6,14,41],attach:[41,45],attack:[10,19,40],attempt:[5,10,16,17,21,24,31,32,33,34,41,43,46],attent:[5,21,41],attribut:[32,33,41,47],auch:27,aug:41,august:17,auth:[34,43],authent:[2,40,46],author:[28,31,34,43],auto:[33,47],autobotchk:[3,4,29],autoconf:3,autoconfigur:3,autodetect:43,autohalfop:10,autom:[0,2,4],automat:[2,3,4,5,12,16,21,30,32,33,34,35,36,40,41,43,46,47],autoop:10,autosav:12,autovoic:[10,47],avail:[4,10,15,19,25,27,29,30,31,34,35,36,38,41,46],avoid:[6,14,29],awai:[35,37,41],awar:41,awesom:28,b33f:30,baa:41,back:[21,28,30,34,36,39,40,41,44],background:[2,4,28],backslash:30,backup:[5,27],backward:[5,37],bad:[10,41,47],badg:47,badgui:45,ban:[0,2,4,10,17,24,33,34,35,46,47],bandwidth:[6,11],banner:[34,42],bar:41,barr:34,base64:29,base:[4,30,34,40,41],basi:30,basic:[2,4,6,7,20,28,30],bask:39,bbb:41,bcst:41,bear:1,becaus:[0,4,16,21,27,28,34,41,44,45,46],becom:[29,30,34,41],been:[0,1,4,5,15,17,21,27,32,34,35,41,45],befor:[0,4,10,14,16,17,18,21,22,23,27,29,30,33,34,41,46],began:37,begin:[16,28,36,41],behalf:41,behav:41,behavior:[13,17,32,34,36,41],behind:34,being:[0,4,10,15,17,21,31,35,36,41,45],beldin:33,bell:41,belong:34,below:[10,15,16,22,24,27,28,30,34,40,41,45],best:[3,6,16,30,33,41,45],better:[3,4,6,20,30,34],between:[3,6,10,15,18,21,22,31,33,34,36,41],beverag:40,big:[5,23,41,44],binari:[3,31],bind:[2,16,17,21,24,27,28,34,44,46],birthdai:34,bit:[3,15,24,28,30,31,34,41,43,46],bitch:10,bitchx:41,blank:41,bless:1,blindli:17,bloat:7,block:[23,24,27,30,42,46],blowfish:[1,2,5,6,19,27,34,40,41],bodi:28,bogu:34,bold:[4,41,42,47],boldfac:41,boot:34,bore:[2,4],boston:1,bot:[0,1,3,4,5,6,7,10,12,13,14,16,17,18,19,20,21,22,23,25,27,28,29,30,31,32,34,35,36,37,38,40,42,43,44,45,46,47],bota:33,botaddr:41,botaddress:41,botattr:33,botb:33,botc:33,botchk:[4,29,30],botdir:30,botfl:41,botflag:[2,22],both:[0,4,10,21,23,31,33,36,40,41,43],botnam:33,botnet:[0,2,3,4,6,8,10,12,15,21,25,30,35,36,38,40,41,44,47],botnetcentr:42,botnetnick:41,botnetop:10,botnick:[21,28,29,30,34],bottom:28,bottre:2,bounc:17,bound:[16,34,41],boundari:14,box:[30,34],brace:10,bracket:36,branch:[4,39],breach:41,brief:30,broadcast:[24,38,41,45,46],broken:[15,28,34,41],brows:15,brute:19,buf:17,buffer:22,bug:[0,3,4,28,30,39],built:[2,16,41,44],builtin:[16,41],busi:28,button:[39,46],bypass:41,bywho:41,cach:[14,41],cafil:[34,43],calcul:21,call:[0,3,4,27,28,29,33,34,41,45],can:[0,3,4,5,6,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47],cancel:[6,41],cannot:[0,27,30,40,41,47],cap:[2,27,35,46],cap_net_bind_servic:16,capabl:[2,34,35,41,44,46],capac:46,capath:[34,43],capit:[4,47],caption:[],captur:[30,41,44],care:[34,41,46],carefulli:[30,41],carelessli:5,categori:41,caught:41,caus:[16,30,33,41,44],caution:41,cbc:41,ccht:45,center:42,central:[15,34],cerfif:[],cert:[29,34,43],certain:[32,34,35,36,41,42,45,47],certainli:[24,30,46],certif:[2,3,21,29,31,34,41],certifict:43,cet:34,chaddr:[5,33],chain:[34,43],challeng:[28,29],chan:[5,10,17,28,29,30,44],chanc:30,chanfil:[10,30,44],chang:[1,2,6,9,10,15,17,19,21,22,24,28,30,31,33,34,35,37,38,39,43,45,46],chaninfo:[29,33],chanmod:[10,29],channel:[0,2,4,5,6,8,12,17,20,21,22,24,27,28,30,32,33,34,35,38,42,44,46,47],channelflag:41,chanrec:[17,41],chanserv:10,chanset:[10,29,33],charact:[2,10,15,21,30,33,34,36,40],chase:[0,4],chat4:2,chat6:2,chat:[0,2,4,6,13,21,29,30,33,34,35,38,41,43,45,46],chatter:34,chattr:[29,47],check:[4,5,10,21,27,28,29,31,34,40,41,43,45],checkout:[30,39],chfinger:34,chghost:[35,37],chjn:41,chmod:[3,34],chof:41,choic:[1,21,28],chon:41,choos:[3,7,29,30,34,35,46],chpass:40,chpt:41,chri:1,chunk:21,cidr:[34,41],cipher:[34,41,43],claim:[24,46],clarifi:32,clean:15,clear:[4,6,39,41,43,45,46],clearchat:[24,45],clearmsg:[24,45],cleartext:41,clemson:47,click:[39,46],client:[15,16,21,24,29,30,34,37,41,43,46],cloak:29,clone:[2,4,10,30],close:[27,41],cmd:[34,41],cmd_t:27,cmsg:45,code:[1,2,3,4,7,27,28,41],coder:[],col:42,cold:[39,40],colon:[34,36],color:[4,41],column:42,com:[2,4,5,6,20,21,28,29,30,33,34,40,41,43],combin:[35,41],combo:29,come:[4,6,17,21,30,39,41],comfort:30,comma:[34,38,41],commadlin:30,command:[2,3,6,10,12,15,16,17,20,21,27,28,29,30,31,32,33,34,35,36,38,40,43,46,47],commandlin:30,comment:[15,17,25,28,30,34,40],commerci:30,common:[2,21,30,31,33,34,37,43,47],commonli:[29,31,34,41],commun:[2,27,33,38,39,41],compat:[3,5,37,41,45,46],compil:[0,2,3,4,27,30,31,34,36,41,43],complet:[3,4,10,15,22,30,35,41,43,47],compliant:[17,21,41],compon:41,comprehens:45,compress:[2,6,29],compris:37,concurr:[34,40],conf:[3,7,16,29,30,37,41,43],config:[2,3,4,6,7,10,11,12,13,14,16,17,18,19,21,22,23,24,25,27,28,29,31,32,33,34,36,40,42,43],configfil:41,configur:[2,3,4,5,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,34,36,39,41,43],confirm:[39,41],conflict:16,connect:[2,4,5,6,14,15,16,21,24,27,29,30,33,34,36,38,43,46,47],connet:[],consequ:45,consid:[4,30,32,34,38,41],consider:40,consist:[33,35,38,41],consol:[2,4,6,10,27,35,38],constantli:27,constitut:[10,21,34],consult:[36,37,43],contact:[28,34],contain:[1,3,4,5,28,30,33,34,36,41,43,45],content:[40,41,45],contest:6,context:27,continu:[30,41],contribut:39,control:[0,2,4,17,21,28,29,33,34,35,43,46,47],conv_form:29,conveni:34,convers:[27,38,43],convert:41,cooldud:30,coordin:34,copi:[1,2,5,7,15,23,27,30,41],copyright:[0,1,3,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,32,33,34,35,36,37,38,39,40,41,42,43,44,47],core:[2,3,6,7,17,18,21,27,28,41,44],correct:[3,31,34,40],correctli:[3,41],correspond:[10,29,32,41],cos:10,could:[1,21,28,33,34,36,39,40,41,43,46],couldn:41,count:21,counterpart:41,coupl:41,cours:[3,28,33,34,41],cover:[32,33],cpu:[21,34,41],crappi:41,crash:[3,41],creat:[0,3,4,15,16,22,27,28,29,30,32,34,39,40,41,43,44,46],creation:29,credit:[28,41],cron:41,crontab:[2,3,29,41],cross:30,crotab:[],crt:[29,34,43],crypto:40,cryptograph:[19,40,41],crytopgraphi:40,ctcp:[2,6,10,21,29,30,34,41,43],ctcr:41,ctrl:41,curl:30,current:[2,4,6,7,9,15,17,18,19,24,27,29,30,34,35,38,41,42,43,45],custom:[16,21,28,29,35,41,43],cut:29,cycl:[10,21,34],cygwin:[2,36],daemon:[16,29,34],dai:[18,23,34,41,44],daili:[30,41],dalnet:[4,17,21],danc:41,danger:41,danish:34,data:[4,10,22,27,31,40,41],databas:[15,41],date:[1,4,30,34,41],db8:[21,30,34],dcc:[0,2,4,6,15,20,21,23,27,29,30,33,35,36,38,40,44],dead:30,deal:[34,41,47],dealloc:27,debian:[30,31],debug:[3,25,27,28,34,41,43,45],dec:[15,41],decemb:[0,26,35,38],decent:27,decid:[37,40],decis:46,declar:[28,41],decreas:34,defens:28,defin:[4,6,10,11,13,17,21,27,28,30,32,33,34,37,41,47],definit:[28,30,31,40],degrad:46,dehalfop:[10,41,47],del_hook:27,delai:[10,15,17,28],delet:[30,41,44],deliber:43,delimit:41,deliv:41,demand:[0,4],demonstr:[6,26],denot:[31,41],deop:[10,41,47],depend:[27,32,39,41,43,47],deprec:[5,31,41],deprici:21,depth:[34,43],der:29,deriv:40,desc:[6,27],describ:[27,28,30,31,33,34],descript:[6,27,28,29,34,41,45,47],descriptivebranchnam:39,deserv:28,design:[0,2,4,19,37,45],desir:[7,27,29,30,40],despit:31,dest:[3,6,30,31,34,41,43],destin:[16,27],destroi:[0,4],detail:[3,4,6,27,30,41,43,45],detect:[7,21,31,36,41,43],determin:[3,16,27,29,30,33,36,41,43],dev:[4,30,31],devel:3,develop:[0,1,2,3,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,46,47],devleop:[],dict:[41,45],did:[1,40],didn:[28,30,41],die:[27,29,30],died:21,differ:[1,3,4,5,10,15,21,28,31,34,40,41,44,45],differenti:41,diffutil:3,digest:[19,41],digit:[34,43],dinner:40,dir:[6,29],direct:[7,31,33,39,41],directli:[5,6,10,16,22,30,41],directori:[2,3,4,6,7,23,27,29,30,31,35,39,43,44],disabl:[10,17,21,34,36,41,43],disc:41,discard:[22,41],disclaim:[2,41],disconnect:[21,22,34,41],discontinu:46,discourag:17,discuss:[4,39],disk:[0,23,30,34,35,41],displai:[12,15,17,21,29,30,34,41,42,45],displaynam:27,dispos:41,dissect:28,distinguish:41,distribut:[0,1,4,30],distro:31,dload:23,dns:[6,14,34,41],doc:[0,3,4,5,6,21,28,31,34,38,41,45,46],document:[2,16,28,30,31,33,36,37,39,43,44],doe:[10,24,28,29,32,34,37,38,41,45,46,47],doesn:[12,14,17,30,38,41,44,45],doing:[19,21,28,34,41,42],domain:[1,14,33],don:[4,7,10,14,15,17,21,22,24,27,28,29,30,33,34,38,41,43,44],donat:[24,46],done:[5,22,27,29,30,31,33,39,40,41,46],donkei:30,dontkickop:10,dot:38,doubl:21,doubt:36,down:[0,3,4,15,33,41],downer:24,download:[3,4,5,7,15,23,34,35,41],dozen:28,dp_help:27,dp_log:27,dp_mode:27,dp_server:27,dp_stdout:27,dport:16,dprintf:27,drastic:[27,41],driven:41,dronepup:41,drop:[3,4,34,41],dropp:[],dst:6,due:[17,21,28,34,41,45],dump:[21,34,41],duplic:41,dupwait:34,dure:[3,11,22,27,29,30],dynam:[2,3,10,29,30,32,41],dynamicban:[10,41],dynamicexempt:[10,41],dynamicinvit:[10,41],each:[0,4,6,10,15,18,23,28,29,30,33,34,35,38,41,44,45,47],earlier:19,easi:[5,28,30,41,43],easier:[3,19],easili:[0,1,2,4,28,35,41],east:34,ebai:34,ecb:41,ecdsa:29,echo:[35,37,44],ecparam:29,eden:41,edit:[2,3,28,44],editor:[29,30],editplu:30,edu:[41,47],effect:[15,32,34,41],effici:[0,4,30,33,34,35],effort:[0,4],efnet:[4,17,21],egg_lang:34,eggdrop1:7,eggdrop:[1,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,32,33,36,37,40,42,43,44,46,47],eggdroptest:45,egggdrop:2,egghead:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,30,32,33,34,35,36,37,38,39,40,41,42,43,44,47],egghelp:[4,30],eight:[34,41],either:[3,4,15,16,29,30,31,32,33,34,36,41,43,45],element:41,elimin:29,els:[28,38,41],email:[4,29,34,41],embed:41,emerg:37,emot:45,empti:[41,45],enabl:[0,2,4,7,10,12,15,17,21,23,27,28,30,33,34,35,36,37,43,44,46],enclos:[10,36,41,45],encod:[41,42],encount:[30,46],encourag:[2,30,40],encpass2:40,encrypt:[2,5,6,9,19,29,31,33,35,43],end:[3,27,34,40,41,42],endless:10,enforc:[10,29,34],enforceban:10,english:[34,44],enhanc:7,enjoi:40,enlarg:3,enough:[34,41],ensur:[27,29,30,33,40,41],enter:[3,10,15,29,31,34,38,39,40,41,43,45],entir:[30,41,45,46],entitl:47,entri:[3,4,29,30,34],env:34,environ:[16,34,35,43],eof:41,equal:41,equival:[6,21,31],equivil:[],eras:[15,41],error:[4,21,27,30,34,41,46],especi:28,essenti:40,est:34,establish:[36,41,43],etc:[0,2,4,10,17,24,27,30,33,34,35,41,44,47],eth0:16,ethic:34,etiquett:4,european:34,evalu:41,even:[0,4,7,15,17,27,30,32,33,34,35,38,41,46],event:[0,4,24,27,33,34,45,46],eventu:19,ever:[29,30,34,41,43],everi:[0,3,4,10,15,17,21,23,27,28,29,32,34,36,40,41,47],everydai:34,everyon:[38,41],everyth:[3,28,41],everywher:[34,36,41],evnt:[21,41],exact:41,exactli:[15,17,27,28,41],examin:27,exampl:[2,3,4,5,7,15,16,21,27,28,29,30,31,34,38,41,43,44,45,46],exceed:34,except:[4,13,21,27,34,41,43],excess:[4,10,21],exchang:29,exclud:41,exclus:[21,41],execut:[2,3,7,27,28,41],exempt:[0,1,2,4,10,17,24,33,35,46,47],exhaust:[41,45],exist:[0,4,15,21,27,40,41,45,46,47],exit:[4,6,12,15,21,41],expand:[0,2,4],expans:41,expect:[6,13,34,41],experi:[3,15,28,30],experienc:3,expir:[10,17,18,21,32,34,41,43],explain:10,explan:[10,30,31,41,45],explicit:37,explicitli:[5,41,43],express:41,extend:[24,35,37,41],extens:[3,30],extern:[16,29,34],extra:[7,34,37],extract:[30,41],f270:30,face:46,fact:[0,4,45],fail:[14,23,34,41,43],failur:[41,45],fake:41,fals:41,famili:34,familiar:[4,28],fanci:40,fancyp:28,far:15,fast:30,faster:41,fastest:4,fatal:41,fault:27,favor:[5,22],featur:[0,2,4,7,10,17,21,22,29,30,34,36,37,39,41,43,46,47],februari:13,feel:[4,5,27,39],few:[24,28,30,31,34,41,46],field:[21,34,41,43],fifth:1,fight:10,figur:[3,30],fil:41,file:[1,2,3,4,6,7,8,9,10,11,12,13,14,16,17,18,19,20,21,22,23,24,25,26,27,28,29,32,33,35,36,40,42,43,47],file_receiv:41,file_send:41,file_send_pend:41,filearea:41,filedb:[15,41],filemask:6,filenam:[6,10,18,30,34,43],filepath:6,files:15,filesi:[2,6,34],filestat:6,filesystem:[15,41,47],fill:[34,39,43],filt:[27,41],find:[3,6,14,17,20,27,28,29,30,38,39,41,46],fine:[17,21,34,45],finger:[13,30],fingerprint:[29,34,43],finish:[4,15,30,41],finnish:34,firewal:34,first:[0,2,4,5,15,19,21,27,28,30,31,33,34,40,41,43,44,45],five:41,fix:[0,3,4,27,34,41],flag:[2,5,6,10,13,17,22,27,28,30,34,35,42],flagmask:45,flash:42,flat:41,flexibl:[41,43],flood:[0,4,10,13,18,21,33,34,35,41,47],floor:1,flud:41,flush:22,focus:[24,46],folder:7,follow:[3,4,5,10,15,17,21,24,27,30,31,33,34,35,37,39,40,41,42,43,44,45,46],foo:[28,29,41],forbid:3,forc:[3,10,12,15,19,22,28,34,36,41],forcefulli:43,forev:34,forget:41,fork:[31,39],form:[0,4,27,28,41,42],format:[7,21,27,29,30,31,34,40,41,42,45],forward:18,found:[2,4,27,34,41,45],foundat:1,four:[10,28,34,36,41,42],fourth:28,fprint:[34,43],fragil:41,franklin:1,free:[1,2,5,27],freebsd:36,freeli:[0,4],freenod:21,french:34,frequent:[4,30],fresh:34,fri:41,friend:[10,47],frim:27,from:[0,1,2,3,4,5,6,7,10,15,16,17,18,19,21,22,24,27,28,29,30,31,32,33,34,36,38,40,42,43,44,45,46,47],front:[10,28,30,31,41,46],ftp:[5,30],full:[3,4,5,24,30,36,41,43,45,46],fuller:1,fulli:[5,34,41,46],fun:[3,46],func:27,func_nam:27,func_tabl:27,function_to_cal:27,further:[29,41],futur:[3,17,30,40,41],fwd:18,gain:[0,4,40,47],game:[0,2,4,24,46],garbag:27,gatewai:[24,45,46],gave:30,gayteen:0,gcc:3,gener:[0,1,3,4,19,24,28,29,30,37,40,41,43,46],genkei:29,genrsa:34,geo:28,german:34,get:[6,7,10,21,22,23,27,28,31,34,38,47],geteggdrop:[2,4,30],getinfo:41,getop:10,gif:15,git:[2,3,30,39],github:[2,4,30],give:[3,4,10,15,21,28,30,33,34,35,38,40,41,47],given:[4,14,15,16,30,41,45],global:[2,12,16,17,21,22,27,28,32,33,45,47],globalflag:41,gmt:[34,41],gnu:[0,1,3,4,11],goe:[3,10,29,32,33,38,41,43],going:[0,4,15,21,28,31,41],gone:[17,41],goober:41,good:[0,15,21,24,28,30,34,41,46,47],got:41,gpl:[0,4],grab:41,grain:28,grant:[29,35,43,46],graphic:43,greater:41,gree:28,greet:[0,2,4,10,28],greetmsg:28,greetscript:28,grep:29,ground:34,group:[15,16,34,37,41],grown:0,gseen:[6,20],guarante:17,guess:17,gui:45,guid:[2,3,28,30,31],gunzip:30,guppi:41,gzip:[11,41],had:[3,5,10,33,34,41,46],haha:4,halfop:[10,41,47],hand:[28,34,41],handi:30,handl:[28,29,32,34,40,43,45],handshak:41,hang:[6,14],happen:[28,30,32,34,41],hard:[28,34],harder:28,hardwar:[0,4],has:[0,1,2,4,5,10,14,15,17,21,28,30,31,32,33,34,35,36,40,41,43,45,46,47],hash:[2,5,19,30],hasn:21,hate:47,have:[0,1,3,4,5,6,9,10,12,15,17,18,19,21,22,24,27,28,29,30,31,32,33,34,35,36,38,40,41,43,44,45,46,47],haven:30,head:34,header:[2,4,27,28,31,43],heaven:3,held:45,hello:[17,21,29,30,34,35,41],help:[0,3,13,21,27,28,29,30,32,33,34,36,38,41,42,47],helper:3,henc:[7,27,41],here:[2,4,10,13,14,15,17,18,21,23,28,29,30,32,33,34,41,44,45],herself:4,hidden:[15,30,35],hide:[6,36,41],high:44,higher:[17,19,22,23,30,43],highest:41,highli:[3,21,30],highlight:47,him:1,himself:4,hint:28,his:[21,30],histori:45,hit:41,hold:[22,41],hole:34,home:[3,15,16,29,30,43],hook:27,hook_5minut:27,hook_backup:27,hook_daili:27,hook_di:27,hook_hourli:27,hook_idl:27,hook_load:27,hook_minut:27,hook_num:27,hook_pre_rehash:27,hook_read_userfil:27,hook_rehash:27,hook_secondli:27,hook_userfil:27,hope:[30,46],hopefulli:[3,41],hors:30,host:[0,2,4,10,16,21,24,28,32,33,34,43,45,47],hostmask:[28,29,32,33,35,40],hostnam:[6,10,14,29,34,36],hosttarget:[24,45],hour:[6,25,27,32,34,41],hourli:[18,27,34],how:[0,3,6,10,13,14,15,18,21,22,24,28,29,30,31,32,33,34,41,43,44,45,46],howev:[4,7,13,21,29,31,34,40,41,43,44],htgt:45,html:[4,36],http:[2,4,6,20,25,30,37],hub:[4,22,30,33,34,40,43],hubbot:31,hubcap:47,humor:29,hup:41,hurt:5,iconfig:[3,7,30],idea:[28,30,39],ideal:[40,46],ident:[2,6,7,17,21,29,34,36,40,41],identd:[16,30],identifi:[29,34,40,41,47],idl:[10,27,41],idx:27,ignor:[0,4,13,21,22,28,33,34,35,41,45],ill:41,imag:4,immedi:[21,30,40,41],imperson:16,implement:[6,7,16,31,34,37,39,40,41,46],implementatino:31,impli:[1,27],importantli:28,improv:[0,4],inact:[10,23],inc:1,incess:0,includ:[0,2,3,4,7,17,25,27,29,30,31,32,34,35,36,40,41,43,45,46],incom:[15,34,41],increas:[34,40],incred:[30,41],independ:7,indic:[21,27,30,41,45],infeas:[24,46],infin:34,infinit:15,info:[3,4,10,12,17,27,30,34],inform:[0,2,3,4,5,6,10,15,25,27,28,29,30,33,34,36,37,41,43],infrastructur:43,ing:[17,24,46],init:[21,34,41],init_serv:21,initi:[27,28,30,36,37,41,43],input:41,insecur:10,insensit:41,insert:[10,42],insid:[28,34],instal:[0,4,5,28,29,31,34],instanc:10,instantli:21,instead:[1,4,5,10,15,16,17,22,24,30,34,40,41,43,44,46,47],instruct:[7,30,40],integ:[10,41],integr:2,intend:[3,32,41],intens:21,intent:[24,46],intention:28,interact:[3,4,6,16,17,34,41,43,46],intercept:41,interchang:[31,36],interest:4,interfac:[2,24,41,46],intern:[21,34,41,45],internet:[0,4,41,43],interpret:[3,36,41,42],interv:41,introduc:[4,30,41],invalid:41,invers:42,invit:[0,2,4,10,17,24,33,35,37,46],invite:41,invok:41,involv:29,invt:41,ipaddress:41,iptabl:16,ipv4:[30,34,36],ipv4address:41,ipv6:[2,30,34,35,41],ipv6address:41,irc:[0,4,6,15,16,21,24,28,29,30,32,33,34,35,36,37,38,41,42,44,45,47],ircawai:41,ircd:[17,21,41],ircii:[23,41],ircnet:[4,10,17,21],ircop:[10,17],ircu2:17,ircv3:[2,35,41,44],isn:[6,15,21,22,25,30,32,41],isol:33,isop:10,isoptest:10,isp:30,issu:[4,5,16,24,30,34,39,41,43,45,46],issuer:43,istn:10,ital:41,item:41,its:[1,2,4,7,10,15,16,17,19,21,22,24,28,30,33,34,35,39,41,44,46],itself:[27,28,29,34,41],itsself:15,j9irk4vs28b0obz9easys4w2ystji3u:46,jan:[41,43],janitor:[15,47],januari:[1,8,9,12,18,20,23,25,41],jkp:30,job:43,john:1,join:[2,6,10,12,17,18,24,28,30,31,32,34,35,37,38,41,45,46,47],jpk:34,jul:7,juli:0,jump:[21,33,43],jun:44,june:16,jupe:41,just:[0,3,4,5,6,14,15,17,19,22,27,29,30,33,34,38,40,41,44,45,46],karma:39,keep:[2,4,10,15,21,23,30,34,46],kei:[2,3,10,17,24,28,29,34,40,45,46],kept:[32,34],keyout:[29,43],keypair:[29,31],kick:[10,17,21,34,41,44,47],kicker:41,kiddi:34,kill:[30,41],killer:5,kilobyt:[15,34],kind:41,know:[17,18,21,24,27,28,32,33,34,41,44,46],knowledg:0,known:[21,29,34,40,41],kreativrauschen:[6,20],kvirc:43,lag:[34,38],lame:[10,17,33,34,41],lamer:34,lameshar:33,lamest:[10,30,33,34,42],lamestbot:[3,10,18,21,30,33,34,42],lang:44,languag:[28,34,35,44],larg:[2,15,17,21,34],larger:[28,40],last:[0,5,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,30,32,33,34,36,37,38,41,42,43,44,45,47],laston:41,later:[1,3,6,9,18,19,25,28,30,34,41,43],latest:[4,5,30],launch:30,layer:[29,31],lazi:17,leaf:[33,34,40,43],learn:[17,29,30,34,35,41],least:[4,17,27,30,32,34],leav:[10,21,30,34,38,41,46],left:[17,41],legal:[2,4],len:21,length:[17,21,27,40,41,43],less:[13,38,41],let:[4,6,10,14,18,27,28,30,33,34,35,41],letter:[4,34,47],level:[11,16,29,34,47],libera:[2,4,5,21,27,28,29,30],librari:[28,40,43],libssl:[4,30,31],licens:[0,1,4],lieu:41,life:[18,30],light:46,like:[0,1,4,6,9,10,13,15,17,19,27,28,29,30,34,35,36,38,39,40,41,43,45,46,47],limbo:34,limit:[2,6,10,15,17,21,33,36],lindex:41,line:[2,3,5,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,33,34,35,40,41,43,44,45,46],link:[0,2,3,4,5,6,7,15,22,23,27,34,35,37,40,43,44],linux:36,list:[0,4,6,10,14,15,19,21,22,24,25,27,28,29,30,31,33,34,35,37,38,43,45,46],listen:[29,30,33,34,36,43],liter:[27,41],littl:[3,5,15,24,30,33,44],llama:33,llamabot:[30,34],load:[6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,33,34,40,41,46],loadmodul:[8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,34,40,46],lobster:40,local:[15,28,30,34,38,39,41,43],localfil:6,locat:[2,4,23,28,29,31,34,43],log:[0,2,4,10,19,24,27,30,39,40,41,46],logfil:[25,27,30,34,44],logfilenam:34,logflag:34,login:[30,34,40,45],logmod:27,logsiz:34,longer:[3,5,15,17,19,27,30,31,41],look:[0,4,5,6,10,20,25,26,28,29,31,34,35,40,41,43,46],lookup:[14,34,36,41],lose:10,lost:41,lot:[5,17,28,30],low:[21,23],lower:21,lowercas:21,lsa:15,luck:[30,46],lurk:2,mac:36,machin:[3,16,30,34],macro:27,made:[0,1,3,4,5,10,22,39,41,43,46],magic:28,mai:[1,4,5,10,11,15,16,17,23,28,30,33,34,36,37,41,44,45,46],main:[7,28,30,31,38],maintain:[2,16,30,44,45],mainten:47,major:[27,30,41],make:[0,2,3,4,5,6,7,10,13,15,19,21,22,24,27,28,29,30,31,34,36,37,39,41,43,44,46],makefil:[3,27],making_modulenam:27,man:34,manag:[2,4,6,15,24,31,46],mandatori:41,mani:[4,5,10,14,15,17,21,27,29,30,31,33,34,41],manipul:[2,34],manpag:34,manual:[4,29,33,34,36,41,43,45],mar:36,march:[32,42,47],mark:[15,35,41,47],mask:[15,21,28,34,45],masquerad:34,master:[15,29,30,32,33,34,41,42,47],match:[1,2,10,15,17,27,28,32,34,40,43,45],math:41,matter:[1,14,28,29],max:[15,17,18,21,23,34],maxdepth:[],maxim:34,maximum:[10,14,15,17,18,21,23,34,40,41,43],maxsend:14,mayb:[28,34],mco:[34,41],mcobx:30,md5:[6,9],mean:[15,17,21,28,29,32,33,34,35,36,40,41,43,45],meaning:[24,41,46],meaningless:47,measur:21,mechan:29,meet:43,mem:41,member:[10,27],memberlist:41,memori:[27,41],mention:27,meridian:34,messag:[4,10,21,27,28,30,34,35,37,38,40,42,44,45],method:[4,6,9,16,17,19,24,28,29,30,31,40,44,46],midnight:34,might:[4,17,23,27,34,41,43],migrat:5,militari:34,milk:47,min:34,miniatur:38,minimum:[0,10,41,45],minor:[27,41],minu:10,minut:[4,10,17,23,27,29,30,32,34],mirc:[21,41],misc:[34,41],miscellan:2,misnom:41,miss:[4,30,41],mix:[10,17],mkcoblx:34,mkdir:6,mnnrrpp:41,mnot:22,mnt:30,moc:41,mod:[3,6,7,20,24,27,34,41,45],mode:[4,5,10,13,17,21,24,27,29,32,34,35,37,46],mode_proc:41,mode_proc_fix:41,modechang:41,moder:[24,29,45,46],modern:[16,40],modes_per_line_max:17,modif:[5,30,41],modifi:[2,6,14,17,28,34,41],modul:[0,2,4,30,33,35,40,46],modular:2,module_clos:[],module_depend:27,module_entri:27,module_expmem:[],module_find:27,module_load:27,module_nam:27,module_regist:27,module_renam:27,module_report:[],module_start:[],module_t:[],module_undepend:27,module_unload:27,modulenam:[7,27],moment:[17,30,31],monitor:[32,35,37],month:[34,41],moo:41,more:[3,4,5,6,13,15,17,20,27,28,29,30,31,33,34,35,37,39,40,41,43],moreov:34,most:[0,2,4,5,16,17,21,27,28,29,30,31,34,35,38,41,45,46],mostli:[24,41,46],motd:[34,42],mount:23,move:[3,4,15,21,30,41,46],mpj:41,mrlame:[30,34],mrslame:[30,34],msg:[4,6,17,20,21,29,30,34,35,38,40,45],msgid:[41,45],msgm:[21,41],much:[2,3,24,27,30,38,41],multi:30,multipl:[0,2,4,16,28,30,33,34,35,41,45],must:[1,2,3,4,10,14,16,17,21,23,27,29,30,31,33,34,40,41,43,45],mydir:15,myownevent123:41,myproc:41,mytag:41,myvar:44,myword:17,name:[3,4,6,8,15,21,27,28,29,30,31,34,45],nano:30,nat:[16,34,36],natur:45,nearli:7,necessari:[10,31],necessarili:41,need:[0,3,4,10,14,16,17,21,27,28,29,30,31,33,34,36,40,41,43,45,46,47],needal:41,needop:41,neg:[14,34,41],negcach:14,negoti:[41,43],net:[1,3,17,21,24,30,37],netbsd:36,nethack:47,netsplit:[16,17,34,35,41],network:[0,2,4,17,21,34,41,42],never:[4,5,10,34,41],new_module_nam:27,newer:[5,30],newhandl:41,newidx:41,newnick:41,newus:[30,34],next:[5,10,15,21,27,28,30,31,34,41],nfree:27,nice:27,nicebot:30,nick:[10,17,21,25,28,29,30,34,47],nicknam:[6,21,28,29,30,34,42,44,45,47],nickserv:[2,43],nist256p:29,nkch:41,nmalloc:27,no_irc:[6,21],nobodi:[15,28],node:[29,43],nodesynch:10,noemail:4,non:[3,10,14,16,17,21,27,29,32,33,41,43,46],none:[8,9,10,12,14,18,19,20,21,23,26,41],noout:29,noqueu:41,nor:16,normal:[0,4,6,13,14,15,16,21,27,28,31,34,41,43,44,45,46],notabl:46,notat:34,notc:41,notcproc:41,note:[2,3,6,7,9,10,14,17,19,21,22,27,29,30,33,34,40,43,45,46],notebox:41,notefil:[18,41],notepad:30,noth:[27,34,41,46],notic:[2,13,15,28,33,34,41,46],notif:41,notifi:[18,21,30,34,35,37,41],nots:1,nov:33,novemb:[22,37],novic:[0,4],now:[3,5,15,16,17,28,29,30,31,33,34,36,40,41,45,47],ntik:41,number:[2,10,15,17,18,19,21,23,24,27,30,31,33,34,40,41,43,45,46,47],numer:[29,31,41],nxdomain:14,oauth:46,obtain:[2,31,43],obvious:[32,41],occur:[17,28,41],occurr:27,octal:34,octob:[10,19,21,34],off:[10,16,17,21,30,33,34,38,41],offer:[30,31,45,46],offici:[2,4],offlin:41,offset:34,often:[4,6,14,29,34,45],oident:16,oidentd:16,okai:34,old:[6,19,21,30],old_module_nam:27,older:[4,36,41],oldest:[2,41],oldhandl:41,omin:28,omit:[41,43],onc:[4,10,15,17,19,21,28,29,30,39,41],one:[4,10,15,16,17,21,27,28,29,30,31,32,33,34,35,38,39,40,41,43,44],ones:[14,22,33,36,41],onjoin:18,onli:[3,4,5,6,7,10,15,16,17,18,20,21,22,25,26,28,29,30,32,33,34,36,38,40,41,42,43,44,45,47],onlin:[6,15,18,29],opchar:17,open:[16,29,34,38,39,41,43],openbsd:36,openssl:[2,3,4,19,29,30,31,34,43],oper:[13,21,28,34,36,41,42],opped:[10,41,47],opping:[0,4],oppos:41,ops:[10,41,47],optim:[6,21],optino:37,option:[1,3,4,7,10,15,16,19,21,29,30,34,43,46],order:[4,14,28,34,40,41,43,45],ordinari:[41,43],org:[2,4,5,6,25,28,30,31,33,34,41],origin:[1,21,30,39,41],oss:16,other:[0,1,4,6,9,10,14,15,16,17,18,19,21,22,27,28,29,30,31,32,33,34,35,36,37,38,40,41,42,43,44,45,46,47],otherdir:3,otherwis:[3,4,12,15,28,32,33,34,36,40,41,43,45],our:[30,33,41],ousterhout:1,out:[0,3,4,23,25,28,29,30,33,34,38,40,41,43],outform:29,outgo:[34,41,44],output:[2,3,27,29,31,40,42,44,45],outsid:[19,31,34],over:[15,21,24,27,28,30,34,36,41,43,44,46],overhead:7,overrid:[22,36,43],overridden:17,overwrit:[16,30,41],overwritten:[5,34,41],own:[1,7,15,16,21,22,28,29,30,31,37,41,43,44,46],owner:[4,10,30,34,38,41,47],p_tcl_hash_list:27,packag:[1,3,4,30,31],pad:41,page:[30,39],pai:[5,41],pain:[23,30],pair:[29,31,41,43,45],paragraph:3,paramet:41,paranoid:[22,34],pars:41,part:[0,4,21,24,28,34,35,41,43,44,46],parti:[2,5,12,30,33,34,35,41,43,47],particular:[5,29,34],partproc:41,partylin:[2,4,6,12,30,31,33,34,36,40,41,43,44,45,46,47],pass:[28,29,30,36,38,40,45],passiv:33,passthru:34,password:[5,6,9,17,19,21,22,29,30,33,34,35,38,40,43,46],past:[1,4,27,34],patch:[2,36,41],path:[2,3,15,16,30,31,41,43],pathnam:41,patient:15,pbk:40,pbkdf2:[2,5,6,40],peer:[21,34,43],pem:[29,34],penalti:21,pend:[6,10],peopl:[4,10,15,16,17,18,21,22,28,30,34,35,38,41,42,47],per:[17,41,45],percent:42,perform:[0,3,4,5,10,30,41,47],perhap:30,period:[6,14,30,41],perm:34,perman:[10,32,34,41],permiss:[4,34,40],permit:41,perorm:2,persist:30,person:[4,28,30,34,41],phew:30,phrase:41,physic:33,pick:41,pictur:5,pid:[30,34,41],pidfil:34,piec:[3,28],ping:13,pipe:33,pl1:41,place:[1,3,5,7,10,15,17,28,30,32,34,41,43,46],plain:[29,34,43],plaintext:[29,41,43],plan:[4,28,41],platform:[0,4,24,41,46],pleas:[4,5,6,7,9,10,16,19,21,31,34,37,41],plu:[10,21,34,41,43],pmsg:28,point:[3,6,21,26,30,33,34,41],pointer:[1,3,4,35,42],popul:45,popular:[0,4,5,30,34],port:[1,5,14,16,21,22,29,30,31,33,34,36,43],portabl:41,portion:[3,7,10,41],portrang:34,posit:[27,34],posix:41,possibl:[3,10,13,15,21,29,31,34,36,37,38,41,43,45],potenti:[5,16,28,41,45],pour:39,power:[4,35],practic:40,pre:[41,43],preced:[30,41,43],prefer:[34,36,43],prefix:[5,17,21,28,31,34,38,43,45,46],preinit:41,prematur:30,prepar:33,prepend:34,prerehash:41,prerequisit:2,prerestart:41,prerout:16,present:[2,6,28,29,36,41,45,46],preserv:30,pretend:46,pretendnet:31,pretti:[0,38],preval:29,prevent:[0,4,10,17,18,24,30,33,36,41,46],previou:[1,4,5,19,30,41,46],previous:[5,30,41],primari:[21,34],prime256v1:29,prime:34,printf:27,prior:[3,29,30,40,43],prioriti:41,privat:[18,22,28,29,30,31,34,38,41,43],privatekei:[29,31,34,43],privileg:[0,4,16,47],privmsg:[10,28,29,41],probabl:[4,21,29,30,31,41],problem:[30,34,36],proc:[21,27,28,45],proce:41,procedur:[2,22,45,47],process:[0,3,4,5,11,15,16,23,29,30,33,40,41,43],procnam:[28,41,45],produc:[34,41],program:[0,2,4,16,29,30],progress:15,prohibit:34,project:[2,39,46],prompt:[3,4],promptli:30,proper:[3,36,41],properli:[5,30,31,33,34],protect:[0,2,3,4,10,19,21,29,30,32,34,40,41,43,47],protectfriend:10,protecthalfop:10,protectop:10,protocol:[31,34,37,41,43],prove:30,provid:[0,2,4,5,6,7,8,10,11,12,13,14,15,16,17,18,20,21,22,23,24,27,29,30,34,36,37,39,41,43,45,46],pseudo:41,pub:[4,5,21,29,41],pubkei:29,publicli:25,publish:34,pubm:[21,41],pull:[4,39,40],punish:[10,41,47],purpos:[0,1,6,25,26,33,34,41],push:[39,41],put:[1,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,30,34,41,43],putlog:[21,27,28],putquick:21,putserv:[10,28,29],putti:29,pwd:[6,30],quakenet:[4,21],qualifi:34,quann:[6,20],queri:[14,16,36],question:[4,29],queu:[15,21,41],queue:[21,27],quick:[2,27,30,34],quicker:30,quickli:[2,34],quiet:[21,34,47],quit:[4,6,21,30,34,41],quot:[41,45],quota:34,raid:[24,46],rais:[10,21],ram:34,rand_max:41,random:[10,21,33,41],rang:[30,34],rate:21,rather:[5,41,43],raw:[34,43],rawt:41,rcvd:41,reach:[17,21,34],react:28,read:[0,2,3,4,6,7,16,27,28,29,30,31,34,41,42,46],readabl:41,readm:[2,3],readonli:27,real:[21,27,41],realli:[28,30,34,44],realnam:21,reason:[4,27,29,30,33,34],reboot:[16,29],receiv:[14,15,21,23,29,33,41,45],recent:[4,30,41,43],recev:[],recipi:41,recogn:[17,21,29,47],recom:5,recommend:[4,10,23,27,30,40,41,44,45],recompil:[17,30],reconnect:[22,41],record:[2,22,27,35,47],redirect:16,reduc:[27,45],refer:[27,28,31,34,41],refin:28,reflect:[5,41],refresh:[41,45],regardless:41,regist:[2,10,29],regular:[10,41,43],regularli:35,rehash:[7,27,28,34],reiniti:41,reject:[21,33,34],rejn:41,rejoin:[30,41],rel:[14,27,30,41],relai:[0,4,33,34],relat:[1,6,10,28,36,41],releas:[0,1,30,40,41],relev:[4,27,30],reli:41,reliabl:[41,45],relink:33,relinquish:41,rem_builtin:27,rem_tcl_command:27,rem_tcl_int:27,rem_tcl_str:27,remain:[10,32,41],remaind:[15,45],rememb:[10,28,29,30],remind:34,remot:[15,33,34,41,42],remotebotnam:41,remov:[5,10,15,19,27,29,30,32,35,36,40,44,45,46],renam:[2,15,27,30,34,41],render:[5,24,46],repeat:[4,41],replac:[10,21,27,29,34,41,42,46],repli:[6,13,14,16,17,34,41],replic:[45,46],repo:39,report:[6,15,25,27,30,44],repositori:[4,30],repres:[41,45],req:[29,34,43],request:[0,4,5,7,10,13,15,17,21,30,32,34,36,37,39,41,43,44,46],requir:[2,4,5,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,29,30,34,40,43,45],reread:41,resend:[14,41],reserv:[30,34,38],reset:41,resolut:34,resolv:[6,14,34,41],resourc:27,respect:[14,36,41,42],respond:[10,30,41],respons:[21,41],rest:[3,27,33,34,40,41,45],restart:[2,3,4,5,7,28,30,34],restrict:[1,15,16,21,34,41,42,46],result:[21,32,34,36,41],resum:41,resync:22,retain:41,retri:23,retriev:[6,18],retrydelai:14,reus:[5,41],reveng:10,revengebot:10,revers:[40,41],revert:41,review:[29,31],revis:[0,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,32,33,34,36,37,38,41,42,43,44,45,47],revok:[21,34],rfc1459:[37,41],rfc2812:37,rfc:[17,21,24,41,46],rfc_compliant:41,rich:[0,4,30],right:[6,15,16,26,28,30,41],rijndael:19,risk:[1,21],rizon:21,rmdir:6,rmst:45,robei:[1,3,4,35,42,47],robot:35,roomsstat:24,roomstat:[24,46],root:[15,16],round:[19,40],rout:[16,41],routin:[17,34,41],rsa:34,rule:30,run:[2,3,4,5,7,10,16,21,27,28,29,30,31,33,34,40,42,43,45],s_client:43,safe:[19,29,30,31,40,46],sai:[4,10,15,28,31,33,41],said:[28,33,41],sake:46,salt:[28,40],same:[0,3,4,5,7,10,11,16,17,27,28,30,33,34,37,40,41,42,43,44,45],sampl:[10,30,46],sane:21,sanitycheck:34,sasl:[2,30,35,37],save:[5,6,10,11,12,22,33,34,35,40],scan:30,scenario:[31,33],schat:[34,43],schedul:41,scheme:1,scope:31,screen:[4,39,42],script:[0,2,3,4,7,10,21,29,30,32,35,36,41,44,45,46,47],scripter:33,sdcc:43,sdebug:3,seamless:40,seamlessli:19,search:[27,29,41],sec:34,second:[4,10,13,14,17,21,23,27,28,34,44],secondli:41,secret:10,section:[5,10,17,21,24,28,30,33,34,41,46],secur:[0,2,4,6,9,19,29,30,33,34,35,40,41],see:[0,2,3,4,5,6,10,15,17,21,24,25,27,28,29,30,31,33,34,36,38,39,40,41,42,45],seen:[2,6,10,34,41],selecet:41,select:[4,30,34,35,39,41],self:[2,21,31,34,43],send:[4,6,11,15,17,18,21,22,23,27,28,30,33,36,41,44,45],sender:41,sens:[0,4],sensit:40,sent:[6,15,17,22,25,29,34,37,38,41,43,45,47],separ:[3,7,21,30,33,34,35,36,37,41,44,45],septemb:14,seri:[30,41,43],serv:34,server:[2,5,6,7,10,13,14,15,16,17,19,24,25,27,29,30,34,35,36,37,43,44,45,46],serverlist:41,serverop:10,serverror:21,servic:[6,10,16,24,29,41,43,46],servivc:41,session:[4,36,37],set:[0,1,2,3,5,6,10,11,12,13,14,15,16,17,18,19,21,22,23,24,27,28,31,32,33,35,37,38,40,42,44,45,46,47],setcap:16,setnam:[35,37],setup:[4,6,7,30,34],seven:[10,41],sever:[0,4,13,27,30,31,37,41,44],sexystuff:28,sha1:43,sha1sum:29,sha256:19,shall:34,share:[0,2,4,6,10,11,23,27,34,35,41],sharebot:[33,34,41],sharefail:23,she:41,shell:[0,3,4,16,29,30,34,41],shorter:10,should:[1,3,4,5,10,12,13,14,15,17,19,21,22,24,27,28,29,30,33,34,36,38,40,41,43,45,46],shouldn:16,show:[4,6,10,15,25,28,33,34,41],shown:[15,30,34],shutdown:41,shutdownreason:41,side:[34,41,43,46],sidenot:31,sighup:41,sigil:41,sigkil:41,sign:[21,29,31,34,41,42,43,46],signal:41,signific:[4,6],significantli:45,signoff:41,sigquit:41,sigterm:41,silent:34,simialar:[],similar:[4,10,29,30,34,38,39,41,44],similarli:45,simpl:[4,27,28,29,30,41],simpli:[4,5,29,30,31,37,41,46],simplifi:41,simul:[34,41],simultan:[15,23,41],sinc:[0,3,5,17,30,33,34,35,36,41,43,44],singl:[16,17,29,41,45],sit:[0,4,10,34,40],site:[6,47],situat:33,six:41,size:[15,23,27,34,41],skim:4,skip:[30,41],slash:[30,38],slave:33,slennox:30,slow:[15,30,34],slower:34,small:[3,23,33,44],smaller:3,smile:3,snapshot:[2,30],snowbot:15,snt:29,sock:[27,34],socket:[16,27,31,41,43],softwar:[0,1,2,4],solut:40,some:[0,4,5,10,11,12,13,14,15,16,17,18,19,21,22,23,27,30,32,33,34,35,36,37,41,43,44,46,47],someircnetwork:34,someon:[4,10,17,28,30,31,41,45],someth:[4,28,30,39,41,46],sometim:[4,21,30],somewher:[3,34],song:41,soon:[10,41],sort:[0,4,32],sound:28,sourc:[1,3,4,5,6,7,27,28,31,34,39,41,43,44],space:[0,23,34,37,41],spawn:0,special:[33,41],specif:[6,10,14,16,17,19,21,24,30,33,36,37,41,43,45,46,47],specifi:[10,14,15,16,18,21,22,27,29,30,32,34,35,36,40,41,43,45],spectrum:[24,46],spent:[30,41],split:[10,17,36,38,41,42],splt:41,spoiler:46,spoken:41,spoof:16,spread:34,squar:36,squelch:21,src:[3,7,17,27],ssh:30,ssl:[2,3,4,5,21,29,30,31,35,41],sslcert:[3,31,34,43],sslinc:43,ssllib:43,sslport:43,sslsilent:[3,43],sssss:[],stabil:23,stabl:[2,4,30],stack:[17,36,41],stackabl:41,stage:27,stai:41,stall:41,stand:[0,4,30],standard:[14,16,17,23,27,28,37,41,43,46,47],start:[2,3,4,5,6,9,16,19,21,26,28,29,33,34,37,38,40,41,42,45,46],starttl:43,startup:[2,40,41],stat:6,state:[4,41],statement:41,statist:[6,15,25],statu:[0,2,4,10,24,27,31,34,44,45,46],statuslog:10,stb:21,stdio:27,stdlib:27,stdout:27,stealth:[30,34],step:[2,3,5,27,30,46],stick:32,sticki:[32,41],still:[1,4,5,10,15,22,30,31,34,35,41,46],stone:21,stop:[0,10,15,17,27,41,45],stopnethack:[10,47],storag:[6,12,40],store:[5,6,10,12,15,18,24,25,28,30,33,40,41,45,46],str_dir:27,str_protect:27,stream:[24,46],street:1,strftime:34,string:[2,17,27,28,29,34,40,45,46],strong:34,strongli:[2,4,30],stuff:[2,4,27,28,30,34,41],style:32,sub:[15,41],subdirectori:[15,41],subject:43,sublist:41,submit:[2,41],subscrib:[45,46],subsequ:41,substitut:[2,34],succeed:41,success:[27,30,41],successfulli:[4,27,41,45],sudo:[16,30],suffic:28,suffici:31,suffix:[7,34],suggest:[5,27],suit:[16,30],suitabl:45,sum:28,summar:21,sun:34,sundai:41,supplant:41,suppli:34,support:[0,2,3,4,5,6,8,10,11,14,16,17,18,21,22,23,29,30,31,32,34,35,41,44,46],sure:[4,10,27,28,30,31,33,34,41,46],symbol:[31,41],synchron:43,syntax:[5,29,34,43,47],sys:27,system:[2,3,7,14,15,16,27,29,30,34,35,36,41,42,43],tab:27,tabl:[27,37,41],tag:[15,35,37,45],tail:29,take:[3,4,5,6,15,19,21,25,28,30,34,40,41,43],taken:[27,41],takeov:17,talk:[28,31,35,38],talli:27,tar:[4,7,30],tarbal:[0,30],target:45,task:[0,2,4,33],tcl:[0,1,2,3,4,6,10,11,21,27,28,30,32,34,35,36,43,44,46],tcl_cmd:27,tcl_int:27,tcl_string:27,tclsh:4,tcltk:4,tcp:[2,16,36],team:[0,1,2,3,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,32,33,34,35,36,37,38,39,40,41,42,43,44,47],technic:46,techniqu:44,tell:[15,28,29,30,31,33,34,41,46],telnet:[2,29,30,33,35,36,38,40,41,42,43],temp:41,templat:39,temporari:[10,23,25,32,34],ten:29,term:[2,28,31,41],termin:[4,5,41],test:[28,30,47],text:[4,10,21,27,29,34,42,43,44,45,47],textfil:2,than:[4,10,13,15,17,30,31,34,40,41,43],thank:4,thee:41,thei:[0,3,4,5,7,10,12,13,17,18,21,22,27,28,29,30,31,32,33,34,40,41,43,45],them:[0,1,3,4,5,7,10,12,13,14,15,17,18,21,22,23,27,28,29,30,31,33,34,35,36,37,40,41,44,46,47],themselv:[17,30,33,41,44],therebi:[44,46],therefor:[6,17,30,34,41],thi:[0,1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,39,40,41,42,43,44,45,46,47],thing:[3,4,6,24,26,27,28,29,33,34,41,46],think:[39,47],third:[28,33],thorough:[27,29,31,46],those:[1,3,7,11,15,21,27,28,29,30,41,44,45,46],though:[15,21,28,30,41,43],thr:34,three:[21,29,32,33,34,41],through:[4,10,15,21,24,28,31,35,36,37,38,41,46,47],throughout:27,thse:17,thu:[16,28,36,40,41],tidi:27,till:[],time:[0,3,4,10,14,15,16,17,19,22,23,28,29,30,31,32,33,34,35,37,38,40,42,43,44,46],timeout:[6,14,21,23,34,45],timestamp:[34,41],timezon:34,tip:2,titl:47,tiwtch:6,tls:[41,43],tmi:45,tmp:[23,41],toctre:[],todai:41,togeth:[0,2,4,21,28,33,34,35,37],token:46,told:28,ton:24,too:[15,17,21,23,27,34,41],tool:[3,30],top:[3,4,28,39,41],topc:41,topic:46,total:[10,27,35,41],tout:41,toward:28,trace:21,track:[3,15,24,27,29,41,46],tradit:[24,36,44,45,46],tradition:16,traffic:[3,34,44],trail:27,transfer:[2,6,7,11,15,22,30,33,34,36,41,43,47],transit:[19,40,41],transmit:21,transpar:34,transport:31,treat:[41,46],tree:[0,4,30],tri:[27,34,41],trick:[28,44],trigger:[10,21,27,28,41,45],troubl:[14,34],troubleshoot:[4,30],truncat:45,trust:[4,34,47],ttl:14,turbo:[23,30],turn:[10,16,21,34,41],tutori:[2,31],twcmd:[24,46],twice:41,twitch:[2,6,35],twith:45,two:[4,6,17,22,28,30,32,33,34,40,41,43,44],type:[3,4,6,7,10,12,17,21,24,27,28,29,30,31,32,33,34,35,36,37,38,43],typic:[15,24,34,35,38,41,46],typo:41,ubuntu:31,ufl:41,ugli:15,uglyman:15,uhost:[28,41],uid:[34,43],umod:21,unabl:[17,30,33,36,41,46],unaccess:35,unavail:[21,34],unban:[10,34,41],unbind:[17,34,44,45],uncertainti:45,uncom:[29,31,34,40],under:[0,4,30,35,41],underli:41,underlin:[41,42],undernet:[4,17,21,41],understand:[34,41],understood:21,unexpect:41,unhid:6,unimport:34,unintend:45,uniqu:[34,41,45],univers:34,unix:[0,3,15,16,30,35],unld:41,unless:[17,21,28,30,32,34,41],unlik:[3,35],unlimit:33,unlink:[23,34],unload:[27,41],unoffici:36,unpack:0,unreach:33,unrealircd:[17,41],unreli:[24,45,46],unrest:0,unset:41,unshar:[6,47],unstick:32,unsticki:32,unstuck:41,unsur:30,untar:5,until:[7,10,15,32,34,41],unzip:[5,30],updat:[4,5,19,27,30,34,35,40,41,45],upgrad:[2,40,43],uplink:41,upload:[15,30,35,41,44],upon:[0,4,45,47],upper:14,uptim:[2,6],url:[34,41],usa:1,usabl:[6,15,34],usag:[2,4,6,27,34,41],use:[0,1,3,4,5,6,7,9,10,12,13,14,15,16,17,19,21,22,23,27,28,29,30,31,32,33,34,36,38,40,41,42,43,44,45,46,47],used:[0,2,4,10,11,13,15,19,21,27,28,29,30,31,32,33,34,35,36,38,40,41,42,43,44,45,46,47],useful:[1,4,10,23,30,33,41,43,44],useless:[5,24,46],user:[0,2,3,4,5,6,7,9,10,11,12,13,16,17,18,19,20,21,22,23,24,27,28,30,31,32,34,35,36,38,39,40,42,43,44,45,46],userban:10,userexempt:10,userfil:[0,2,4,5,6,9,10,11,19,22,23,27,29,30,33,34,40,41,44],userflag:17,userhost:45,userinfo1:34,userinfo:[13,41],userinvit:10,userlist:[6,17,20,22],usernam:[16,29,30,34,45,46],usernotic:[24,45],userst:[24,46],uses:[3,6,17,21,23,27,28,29,30,31,32,34,40,41,43,46,47],using:[1,3,4,6,7,9,10,15,16,17,19,21,27,28,29,30,32,33,34,36,40,41,43,44,45,46],usrntc:45,usst:45,usual:[4,29,30,31,32,36,39,40,41,43,46],utc:34,util:3,utim:28,vagu:30,vali:41,valiant:[0,4],valid:[3,10,21,27,33,34,35,41,43],valis0:41,valu:[10,13,14,17,21,24,27,28,34,40,42,43,45,46],vari:[41,47],variabl:[2,5,10,11,12,13,14,15,16,17,18,19,21,22,23,27,28,34,36,42,45],variable_nam:27,varieti:[0,4],variou:[1,27,30,32,34,41],verbos:41,veri:[4,6,16,20,21,28,34],verif:[21,34,43],verifi:[21,29,34,43],version:[0,1,2,3,4,5,13,17,25,27,28,36,37,42,43,45],vertic:41,vhost4:[30,34,36],vhost6:[30,34,36],vhost:[30,34,36],via:[2,3,4,6,11,16,17,20,22,27,28,29,30,32,33,34,35,36,37,38,40,42,43,45,46],video:41,view:[5,7,19,29,30,35,41,45],viewer:45,vim:30,vip:[45,46],virtual:34,visibl:41,visit:[5,46],vista:36,voic:[0,2,4,10,29,41,47],wai:[1,3,4,16,21,24,27,28,29,30,31,32,33,34,38,40,41,43,46],wait:[6,14,15,17,21,23,30,34,41],walk:31,wall:41,wallop:[34,41],want:[0,3,4,6,10,12,14,15,17,18,21,23,27,28,29,30,33,34,36,41,43,44],war:0,warm:39,warn:[4,16,28,41],warranti:1,washalfop:47,wasn:41,wasop:[10,17,47],wasoptest:10,watch:[38,45],web:[2,6,24,34,45],webpag:2,websit:30,week:41,weekdai:41,welcom:28,well:[1,24,28,29,30,31,34,40,41,43,46],were:[1,16,17,30,32,33,34,36,40,41,46],west:34,wget:30,what:[0,1,2,5,6,10,15,17,21,25,28,29,30,34,37,38,40,41],whatev:[1,3,28,34,35,41,42],when:[3,4,6,7,9,10,12,15,16,17,21,22,27,28,29,30,32,34,36,38,40,41,43,45,46],whenev:[21,27,33,41,43],where:[4,6,10,14,15,18,21,27,28,29,30,31,34,35,40,41,43,45],wherea:41,wherev:36,whether:[34,36,41],whew:28,which:[3,5,6,10,12,14,15,16,21,22,27,28,29,30,32,33,34,36,38,40,41,42,43,44,45,47],whichev:32,whisper:[24,45],whitespac:41,who:[10,15,17,21,28,30,34,38,41,47],whoi:[29,34],whole:27,whose:[32,41],whox:[35,41],why:[28,30],wide:[38,43],width:42,wild:41,wildcard:[10,28,29,41,45],window:[2,29,36],wise:[4,34],wish:[3,5,7,16,17,25,27,30,32,33,34,41,45],within:[6,15,27,30,31,32,34,37,41],without:[0,2,4,5,6,9,10,13,19,27,28,29,30,31,33,34,35,37,40,41,43],wizard:31,won:[6,10,22,27,28,30,32,33,34,41,43,45],woobi:[2,3,6,27],word:[15,17,29,30,41,45,46],work:[3,5,6,10,13,15,19,20,22,27,28,29,30,32,33,34,36,37,39,40,41,43,44,45],workaround:24,world:[0,2,4,31,34],worri:24,worth:3,would:[4,5,13,28,29,30,31,33,34,41,42,43,45,46],wouldn:34,write:[1,2,6,7,26,30,34,40,41,46],written:[0,27,30,41,46],wrote:28,wspm:45,wspr:45,wth:[],www:[2,4,6,20],x509:[29,34,43],xfer:[23,47],xtra:41,xvf:30,xxd:29,year:[0,4,30,34,41],yes:[28,31,41],yesterdai:34,yet:[4,21,30,34,41],yoru:29,you:[0,1,3,4,5,6,7,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,38,39,40,41,42,43,44,45,46,47],you_want_to_export:27,your:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,33,34,35,36,38,39,40,41,43,46],yourbot:44,yourbranchnam:39,yourconfig:3,youreggdrop:29,youreggdropconfignameher:29,yourself:[7,29,30,39,40,43],yourusernam:39,yyyymmdd:34,zero:41,zip:30,zomg:[],zxvf:30},titles:["About Eggdrop","Boring legal stuff","Eggdrop, an open source IRC bot","Installing Eggdrop","README","Upgrading Eggdrop","Modules included with Eggdrop","Eggdrop Module Information","Assoc Module","Blowfish Module","Channels Module","Compress Module","Console Module","CTCP Module","DNS Module","Filesys Module","Ident Module","IRC Module","Notes Module","PBKDF2 Module","Seen Module","Server Module","Share Module","Transfer Module","Twitch Module","Uptime Module","Woobie Module","Writing an Eggdrop Module","Writing an Eggdrop Script","Common First Steps","Setting Up Eggdrop","Enabling TLS Security on Eggdrop","Bans, Invites, and Exempts","Botnet Sharing and Linking","Eggdrop Core Settings","Eggdrop Features","IPv6 support","IRCv3 support","The Party Line","Patching Eggdrop","Encryption/Hashing","Eggdrop Tcl Commands","Textfile Substitutions","TLS support","Advanced Tips","Eggdrop Twitch Tcl Commands","Twitch","Users and Flags"],titleterms:{"default":44,"function":[27,46],"int":41,"new":41,"return":41,"short":30,"static":7,"super":30,Adding:33,DNS:14,TLS:[31,43],The:[30,38],Using:33,about:[0,36,37,43],account2nick:41,account:41,accounttrack:41,add:[29,41],addbot:41,addchanrec:41,addit:[27,31],address:41,addus:41,advanc:[34,44],api:24,arg1:41,arg2:41,arg:[41,45],argn:41,assign:29,assoc:[8,41],authent:[29,43],automat:29,background:40,backup:41,ban:[32,41],banlist:41,banmask:41,base64:41,basic:34,bind:[41,45],block:41,blowfish:9,boot:41,bore:1,bot:[2,15,33,41],botattr:41,botflag:33,botishalfop:41,botisop:41,botisvoic:41,botlist:41,botnam:41,botnet:[5,31,33,34,43],botnick:41,botonchan:41,botport:41,bottre:33,callev:41,can:[2,7],cancel:15,cap:[37,41],capabl:37,certif:43,chan:[41,45],chanban:41,chandname2nam:41,chanexempt:41,chanflag:41,chang:[5,41],chaninvit:41,chanlist:41,channame2dnam:41,channel:[10,15,29,41,45],chansettyp:41,charact:41,chat4:36,chat6:36,chat:36,chattr:41,chhandl:41,clear:15,clearqueu:41,cmd:45,command:[4,5,24,41,44,45],comment:41,common:29,commun:31,compil:7,compress:[11,41],compressfil:41,config:[5,15,30,41,44,46],configur:[29,30,31,40],configurearg:41,connect:[31,41],consol:[12,34,41],control:41,core:34,count:41,countus:41,creator:41,crontab:4,ctcp:[13,36],ctime:41,cygwin:3,dcc:[34,41,43],dccbroadcast:41,dccdumpfil:41,dcclist:41,dccputchan:41,dccsend:41,dccsimul:41,dccuse:41,decrypt:41,delchanrec:41,delhost:41,deludef:41,delus:41,desc:[15,41],descript:15,dest:15,destin:41,develop:4,die:41,dir:[15,41],directori:[15,34,41],disclaim:46,dname:41,dnslookup:41,docker:4,document:[4,5],download:30,dst:15,dumpfil:41,durat:41,dynam:7,echo:41,edit:[30,46],eggdrop:[0,2,3,4,5,6,7,27,28,29,30,31,34,35,39,41,45],enabl:[31,40,41],encpass:41,encrypt:[40,41],entri:41,erasenot:41,event:41,exampl:33,execut:34,exempt:[32,41],exemptlist:41,exemptmask:41,extra:41,featur:35,file:[5,15,30,31,34,41,44,46],filemask:15,filenam:[15,41],filepath:15,fileresend:41,filesend:41,filesi:[15,41],filestat:15,find:2,findus:41,first:29,flag:[15,29,33,41,45,47],flushmod:41,formatstr:41,from:41,ftp:4,gener:31,get:[2,4,15,30,41],getaccount:41,getchan:41,getchanhost:41,getchanidl:41,getchaninfo:41,getchanjoin:41,getchanmod:41,getdccawai:41,getdccidl:41,getdesc:41,getdir:41,getfil:41,getfileq:41,getfilesendtim:41,getflag:41,getlink:41,getown:41,getpwd:41,getudef:41,getus:41,git:4,github:39,global:41,hand2idx:41,hand2nick:41,handl:41,handlen:41,handonchan:41,haschanrec:41,hash:40,help:[2,4],helpfil:41,hide:15,histori:30,host:[29,41],hostmask:41,hostnam:41,how:[2,4,5,7],hybrid:40,ident:16,idx2hand:41,idx:41,ignorelist:41,includ:6,info:41,inform:[7,31],instal:[2,3,7,30,36,43],interfac:40,invit:[32,41],invitelist:41,invitemask:41,ipv6:36,irc:[2,17,31,43,46],ircnick:41,ircv3:37,isawai:41,isban:41,isbansticki:41,isbotnick:41,ischanban:41,ischanexempt:41,ischaninvit:41,ischanjup:41,iscompress:41,isdynam:41,isexempt:41,isexemptsticki:41,ishalfop:41,isidentifi:41,isignor:41,isinvit:41,isinvitesticki:41,isircbot:41,isjup:41,islink:41,ismod:45,isop:41,ispermban:41,ispermexempt:41,isperminvit:41,isset:41,istl:41,isupport:41,isvip:45,isvoic:41,join:29,jump:41,keep:44,kei:[31,41,43],keyword:41,killassoc:41,killban:41,killchanban:41,killchanexempt:41,killchaninvit:41,killdcc:41,killexempt:41,killignor:41,killinvit:41,killtim:41,killutim:41,languag:41,lastbind:41,legal:1,level:41,lifetim:41,limit:[24,41,46],line:[4,38],link:[33,41],list:41,listen:[31,41],listnot:41,loadchannel:41,loadhelp:41,loadmodul:[7,41],localfil:15,locat:30,log:[29,34,44],logfil:41,make:33,manipul:41,mask:41,maskhost:41,masktyp:41,match:41,matchaddr:41,matchattr:41,matchban:41,matchcidr:41,matchexempt:41,matchinvit:41,matchstr:41,md5:41,messag:41,minut:41,miscellan:41,mkdir:[15,41],mode:41,modifi:44,modul:[3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,34,41],modular:44,module_clos:27,module_expmem:27,module_report:27,module_start:27,module_t:27,monitor:41,more:2,msg:41,must:5,myip:41,name:41,need:7,newban:41,newchanban:41,newchanexempt:41,newchaninvit:41,newexempt:41,newignor:41,newinvit:41,newnam:41,nick2hand:41,nick:[41,45],nicknam:[15,41],nickserv:29,note:[18,41],notic:4,numberlist:41,numvers:41,obtain:4,old:41,oldnam:41,onchan:41,onchansplit:41,onelin:41,onlin:41,open:2,optim:15,option:41,output:41,own:[],parti:38,partylin:[15,24,29],pass:41,passwdok:41,password:41,patch:39,path:34,pattern:41,pbkdf2:19,pend:15,permiss:29,port:41,pre:[2,4,31],prefix:41,prepar:31,prerequisit:30,proc:41,procedur:41,protect:31,pushmod:41,putallbot:41,putbot:41,putcmdlog:41,putdcc:41,puthelp:41,putkick:41,putlog:41,putloglev:41,putnow:41,putquick:41,putserv:41,putxferlog:41,pwd:15,queue:41,queuesiz:41,quick:[3,4],quit:15,rand:41,raw:41,read:5,readm:4,reason:41,record:[33,41],refreshchan:41,regist:46,rehash:41,reload:41,reloadhelp:41,remov:41,renam:44,renudef:41,req:41,requir:[3,27,41],requisit:[2,4,31],resetban:41,resetchan:41,resetchanidl:41,resetchanjoin:41,resetconsol:41,resetexempt:41,resetinvit:41,restart:[29,41],rfcequal:41,rmdir:[15,41],roomstat:45,sasl:29,save:41,savechannel:41,script:[5,28,34,43],second:41,secur:[31,43],seen:20,self:44,sendnot:41,server:[21,31,41],serveraddress:41,set:[4,29,30,34,36,41,43],setchan:41,setchaninfo:41,setdccawai:41,setdesc:41,setflag:41,setlink:41,setown:41,setpwd:41,setudef:41,setup:15,setus:41,share:[15,22,33],show:30,snapshot:4,socklist:41,solo:40,some:2,sourc:[2,15,30],src:41,ssl:[34,43],start:30,starttl:41,startup:[3,4],stat:15,statu:41,step:29,stickban:41,stickexempt:41,stickinvit:41,still:7,storenot:41,str:41,strftime:41,string1:41,string2:41,string:[41,44],strip:41,stripcod:41,stuff:1,submit:39,substitut:42,support:[36,37,43],system:4,tag:41,tagmsg:41,target:41,tcl:[5,24,40,41,45],tcp:41,telnet:34,term:33,text:41,textfil:42,thing:2,time:41,timer:41,timerid:[],timernam:41,tip:44,tlsstatu:41,topic:41,traffic:41,transfer:23,twcmd:45,twitch:[24,45,46],twitchmod:45,twitchvip:45,type:[41,45],unam:41,unbind:41,uncompressfil:41,unhid:15,unixtim:41,unlink:41,unloadhelp:41,unloadmodul:41,unshar:15,unstickban:41,unstickexempt:41,unstickinvit:41,upgrad:[4,5],uptim:[25,41],usag:[15,36,37,40,43],use:[],user:[15,29,33,41,47],userlist:41,userport:41,userst:45,utim:41,validchan:41,valididx:41,validus:41,valu:41,variabl:[41,44],version:[30,41],via:[39,41],washalfop:41,wasop:41,web:46,what:[4,7,27,33],where:2,whom:41,why:[],window:3,without:7,woobi:26,write:[27,28],you:2,your:44}}) \ No newline at end of file +Search.setIndex({docnames:["about/about","about/legal","index","install/install","install/readme","install/upgrading","modules/included","modules/index","modules/mod/assoc","modules/mod/blowfish","modules/mod/channels","modules/mod/compress","modules/mod/console","modules/mod/ctcp","modules/mod/dns","modules/mod/filesys","modules/mod/ident","modules/mod/irc","modules/mod/notes","modules/mod/pbkdf2","modules/mod/seen","modules/mod/server","modules/mod/share","modules/mod/transfer","modules/mod/twitch","modules/mod/uptime","modules/mod/woobie","modules/writing","tutorials/firstscript","tutorials/firststeps","tutorials/setup","tutorials/tlssetup","using/accounts","using/bans","using/botnet","using/core","using/features","using/ipv6","using/ircv3","using/partyline","using/patch","using/pbkdf2info","using/tcl-commands","using/text-sub","using/tls","using/tricks","using/twitch-tcl-commands","using/twitchinfo","using/users"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,sphinx:55},filenames:["about/about.rst","about/legal.rst","index.rst","install/install.rst","install/readme.rst","install/upgrading.rst","modules/included.rst","modules/index.rst","modules/mod/assoc.rst","modules/mod/blowfish.rst","modules/mod/channels.rst","modules/mod/compress.rst","modules/mod/console.rst","modules/mod/ctcp.rst","modules/mod/dns.rst","modules/mod/filesys.rst","modules/mod/ident.rst","modules/mod/irc.rst","modules/mod/notes.rst","modules/mod/pbkdf2.rst","modules/mod/seen.rst","modules/mod/server.rst","modules/mod/share.rst","modules/mod/transfer.rst","modules/mod/twitch.rst","modules/mod/uptime.rst","modules/mod/woobie.rst","modules/writing.rst","tutorials/firstscript.rst","tutorials/firststeps.rst","tutorials/setup.rst","tutorials/tlssetup.rst","using/accounts.rst","using/bans.rst","using/botnet.rst","using/core.rst","using/features.rst","using/ipv6.rst","using/ircv3.rst","using/partyline.rst","using/patch.rst","using/pbkdf2info.rst","using/tcl-commands.rst","using/text-sub.rst","using/tls.rst","using/tricks.rst","using/twitch-tcl-commands.rst","using/twitchinfo.rst","using/users.rst"],objects:{},objnames:{},objtypes:{},terms:{"04may2000":35,"3rd":5,"5c0":[21,30,35],"break":[15,42],"byte":[17,21,23,27,42],"case":[14,19,21,28,30,32,35,42],"catch":42,"char":[27,35,42],"const":27,"default":[2,3,4,10,11,14,15,17,21,23,29,30,31,32,33,35,41,42,44],"export":45,"final":[0,4,28,29,30,35,41],"function":[0,1,2,4,6,7,19,24,30,34,35,37,41,42,45,46],"import":[27,28,29,30,32,35,39,42],"int":27,"long":[6,10,14,18,21,22,33,35,42,43,46],"new":[4,5,7,19,24,28,29,30,32,35,36,37,38,39,40,41,44,45,47],"null":27,"public":[0,1,4,28,29,31,35,42,44,45,48],"return":[17,27,32,41,46],"short":[2,27,29,37,44],"static":[2,3,10,27,29,42],"super":2,"switch":[5,27,30,32,35,42,44,45],"throw":42,"true":28,"try":[3,4,6,7,20,21,25,27,28,29,30,32,35,46],"var":42,"void":27,"while":[0,4,5,10,16,24,30,32,33,35,39,41,42,47],AND:[19,30,42],ARE:28,Adding:[2,24,47],And:28,CVS:4,DNS:[2,6,42],DOING:28,For:[1,2,3,5,7,15,21,30,31,34,35,37,38,39,41,42,44,45,46,47],IPs:[29,31,37],NFS:23,NOT:[5,28,30,32,34,35,42,46],Not:[6,21,29,38],One:[0,4,28,32,42],THE:3,TLS:[2,3,4,5,29,30,35,42],That:[24,28,30,34,42,48],The:[0,1,2,3,4,5,6,10,11,13,14,15,16,19,21,22,23,24,25,27,28,29,31,32,33,34,35,36,38,41,42,44,45,46,47,48],Their:37,Then:[5,29,30,44],There:[1,3,4,10,11,12,13,14,15,16,17,18,19,21,22,23,24,27,28,29,31,32,33,35,37,41,43,44,47,48],These:[5,11,17,27,30,32,33,34,35,37,43,44,46,48],Use:[16,17,19,21,27,30,35,42],Used:42,Useful:42,Using:[2,4,27,42],WILL:46,With:[0,4,6,15,34,35,41,42,44],YES:7,Yes:7,aaa:[],abcdechannel:42,abil:[2,7,16,31,32,36,42],abl:[3,6,10,15,17,21,30,32,35,39,41,42],abort:[23,30,42,44],about:[2,4,6,24,25,27,28,29,35,42,45,47],abov:[1,4,10,17,19,27,28,29,36,42,43],absolut:[0,31,42,48],abus:[0,2,4],accept:[15,22,24,31,34,35,42,44,47],access:[0,4,16,21,27,28,29,30,36,39,41,42,44,46,47,48],accomplish:3,accord:[1,42,48],accordingli:21,account:[0,2,4,16,18,27,29,30,36,38,40,41,47],accur:[32,42,46],accuraci:32,across:[0,4,34,38,40,42,45],act:[16,27,35,36,42,44],action:[28,29,31,35,42],activ:[2,10,16,30,32,33,39,42,44],actual:[0,4,15,27,28,31,35,39,42],acut:[],add:[3,4,5,7,10,16,17,24,27,28,30,31,32,34,35,36,41,47],add_builtin:27,add_hook:27,add_tcl_command:27,add_tcl_int:27,add_tcl_str:27,added:[0,3,4,5,19,22,24,28,30,32,34,35,36,37,38,41,42,44,46],addhost:17,adding:[4,7,21,27,35,36,38,42],addit:[2,4,5,16,21,30,35,42,44,46],addition:[16,30,32,42],addlang:[35,42],address:[18,22,25,30,34,35,37,44],addus:30,adh:35,adjust:[0,4,17],admin:[35,43],admit:23,advanc:[0,2,4,6,20,28,36],advantag:[5,30,45],advertis:[0,4,42],advis:[3,21,23],affect:[5,10,24,35,36,37,42,47],affet:42,affili:[1,47],after:[3,4,10,16,17,21,27,28,29,32,33,35,42,44,45,47],afterward:[17,35],again:[6,15,25,27,33,34,35,41,42,46],against:[10,15,19,21,28,30,41,42,46],age:42,aggress:34,aka:35,alarm:42,alert:[32,47],algorithm:[19,41],all:[1,5,6,7,10,13,14,15,17,19,21,22,27,28,29,30,31,32,33,34,35,36,37,38,39,41,42,44,45,46,47,48],alloc:[27,42],allow:[0,3,4,5,6,7,10,11,15,16,17,18,19,21,22,23,24,27,28,29,30,32,34,35,36,41,42,44,45,47],alltool:35,almost:[0,4,30,33,48],along:[4,15],alphabet:35,alphanumer:47,alreadi:[10,21,27,28,30,31,32,34,35,41,42,47],also:[0,2,3,4,7,10,11,12,13,14,15,16,17,18,19,21,22,23,27,28,29,30,33,34,35,36,39,41,42,43,44,45,46,47,48],alt:[21,35],alter:[15,36,42,47],altern:[2,4,16,21,30,31,34,35,42,44],although:[17,30,35,42],altnick:[21,30],altogeth:19,alwai:[0,3,4,10,30,32,33,35,42],amount:[6,35],anachron:31,ani:[0,1,3,4,5,7,12,15,16,17,18,21,22,24,27,28,29,30,33,35,36,39,41,42,44,46,47,48],annoi:28,announc:32,anonym:35,anoth:[0,10,15,17,18,21,22,27,30,34,35,42,43,46],another:5,ansi:42,answer:[0,7,13,16,21,28],any_other_funct:27,anymor:[6,9,19,35],anyon:[10,33,42],anyth:[0,4,15,28,29,30,34,35,39,42,46],anywai:35,anywher:[39,42],aol:[28,41],aop:10,apart:[27,35],api:6,apostroph:39,appear:[29,30,34,35,42,46],append:[27,42],appli:[30,33,35,41,48],applic:[1,35,42],appreci:31,appropri:[3,5,30,35,38,40,41],april:[24,46],apt:[30,31],arbitrari:42,arbitrarili:46,archiv:4,area:[6,15,35,42,45,48],aren:[30,35,42,45,46],arg:27,argument:[15,17,28,29,37,42,46],around:[0,4,24,31,37,42,47],arriv:42,ascii:42,ask:[4,17,29,30,39,42,44],assign:[34,35,42],assist:[2,30,32,44],assoc:[2,6],associ:[24,32,42,47],assum:[21,28,30,31,32,33,35,42],assumpt:38,assur:46,asynchron:[6,14,42],attach:[32,42,46],attack:[10,19,41],attempt:[5,10,16,17,21,24,31,32,33,34,35,42,44,47],attent:[5,21,32,42],attribut:[33,34,42,48],auch:27,aug:42,august:17,auth:[35,44],authent:[2,32,41,42,47],author:[28,31,35,44],auto:[34,48],autobotchk:[3,4,29],autoconf:3,autoconfigur:3,autodetect:44,autohalfop:10,autom:[0,2,4],automat:[2,3,4,5,12,16,21,30,32,33,34,35,36,37,41,42,44,47,48],autoop:10,autosav:12,autovoic:[10,48],avail:[4,10,15,19,25,27,29,30,31,35,36,37,39,42,47],avoid:[6,14,29],awai:[36,38,42],awar:42,awesom:28,b33f:30,baa:42,back:[21,28,30,35,37,40,41,42,45],background:[2,4,28],backslash:30,backup:[5,27],backward:[5,38],bad:[10,42,48],badg:48,badgui:46,ban:[0,2,4,10,17,24,34,35,36,47,48],bandwidth:[6,11],banner:[35,43],bar:42,barr:35,base64:29,base:[4,30,32,35,41,42],basi:30,basic:[2,4,6,7,20,28,30],bask:40,bbb:[],bcst:42,bear:1,becaus:[0,4,16,21,27,28,35,42,45,46,47],becom:[29,30,35,42],been:[0,1,4,5,15,17,21,27,33,35,36,42,46],beerbot:32,befor:[0,4,10,14,16,17,18,21,22,23,27,29,30,32,34,35,42,47],began:38,begin:[16,28,37,42],behalf:42,behav:42,behavior:[13,17,33,35,37,42],behind:35,being:[0,4,10,15,17,21,31,32,36,37,42,46],beldin:34,bell:42,belong:35,below:[10,15,16,22,24,27,28,30,35,41,42,46],best:[2,3,6,16,30,34,42,46],better:[3,4,6,20,30,35],between:[3,6,10,15,18,21,22,31,32,34,35,37,42],beverag:41,big:[5,23,42,45],binari:[3,31],bind:[2,16,17,21,24,27,28,32,35,45,47],birthdai:35,bit:[3,15,24,28,30,31,35,42,44,47],bitch:10,bitchx:42,blank:42,bless:1,blindli:17,bloat:7,block:[23,24,27,30,43,47],blowfish:[1,2,5,6,19,27,35,41,42],bodi:28,bogu:35,bold:[4,42,43,48],boldfac:42,boot:35,bore:[2,4],boston:1,bot:[0,1,3,4,5,6,7,10,12,13,14,16,17,18,19,20,21,22,23,25,27,28,29,30,31,33,35,36,37,38,39,41,43,44,45,46,47,48],bota:34,botaddr:42,botaddress:42,botattr:34,botb:34,botc:34,botchk:[4,29,30],botdir:30,botfl:42,botflag:[2,22],both:[0,4,10,21,23,31,32,34,37,41,42,44],botnam:34,botnet:[0,2,3,4,6,8,10,12,15,21,25,30,36,37,39,41,42,45,48],botnetcentr:43,botnetnick:42,botnetop:10,botnick:[21,28,29,30,35],bottom:28,bottre:2,bounc:17,bound:[16,35,42],boundari:14,box:[30,35],brace:10,bracket:37,branch:[4,40],breach:42,brief:30,broadcast:[24,39,42,46,47],broken:[15,28,35,42],brows:15,brute:19,buf:17,buffer:22,bug:[0,3,4,28,30,40],build:42,built:[2,16,42,45],builtin:[16,42],busi:28,button:[40,47],bypass:42,bywho:42,cach:[14,42],cafil:[35,44],calcul:21,call:[0,3,4,27,28,29,34,35,42,46],callback:32,can:[0,3,4,5,6,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],cancel:[6,42],cannot:[0,27,30,32,41,42,48],cap:[2,27,32,36,47],cap_net_bind_servic:16,capabl:[2,35,36,42,45,47],capac:47,capath:[35,44],capit:[4,48],caption:[],captur:[30,42,45],care:[35,42,47],carefulli:[30,42],carelessli:5,categori:42,caught:42,caus:[16,30,34,42,45],caution:42,cbc:42,ccht:46,center:43,central:[15,35],cerfif:[],cert:[29,35,44],certain:[33,35,36,37,42,43,46,48],certainli:[24,30,47],certif:[2,3,21,29,31,35,42],certifict:44,cet:35,chaddr:[5,34],chain:[35,44],challeng:[28,29],chan:[5,10,17,28,29,30,45],chanc:30,chanfil:[10,30,45],chang:[1,2,6,9,10,15,17,19,21,22,24,28,30,31,34,35,36,38,39,40,44,46,47],chaninfo:[29,34],chanmod:[10,29],channel:[0,2,4,5,6,8,12,17,20,21,22,24,27,28,30,32,33,34,35,36,39,43,45,47,48],channelflag:42,chanrec:[17,42],chanserv:10,chanset:[10,29,34],charact:[2,10,15,21,30,34,35,37,41],chase:[0,4],chat4:2,chat6:2,chat:[0,2,4,6,13,21,29,30,34,35,36,39,42,44,46,47],chatter:35,chattr:[29,48],check:[2,4,5,10,21,27,28,29,31,35,41,42,44,46],checkout:[30,40],chfinger:35,chghost:[36,38],chjn:42,chmod:[3,35],chof:42,choic:[1,21,28],chon:42,choos:[3,7,29,30,35,36,47],chpass:41,chpt:42,chri:1,chunk:21,cidr:[35,42],cipher:[35,42,44],claim:[24,47],clarifi:33,clean:15,clear:[4,6,40,42,44,46,47],clearchat:[24,46],clearmsg:[24,46],cleartext:42,clemson:48,click:[40,47],client:[15,16,21,24,29,30,32,35,38,42,44,47],cloak:29,clone:[2,4,10,30],close:[27,42],cmd:[35,42],cmd_t:27,cmsg:46,code:[1,2,3,4,7,27,28,42],coder:[],col:43,cold:[40,41],colon:[35,37],color:[4,42],column:43,com:[2,4,5,6,20,21,28,29,30,34,35,41,42,44],combin:[36,42],combo:29,come:[4,6,17,21,30,40,42],comfort:30,comma:[35,39,42],commadlin:30,command:[2,3,6,10,12,15,16,17,20,21,27,28,29,30,31,32,33,34,35,36,37,39,41,44,47,48],commandlin:30,comment:[15,17,25,28,30,35,41],commerci:30,common:[2,21,30,31,34,35,38,44,48],commonli:[29,31,35,42],commun:[2,27,34,39,40,42],compat:[3,5,38,42,46,47],compil:[0,2,3,4,27,30,31,35,37,42,44],complet:[3,4,10,15,22,30,36,42,44,48],compliant:[17,21,42],compon:42,comprehens:46,compress:[2,6,29],compris:38,concurr:[35,41],conf:[3,7,16,29,30,38,42,44],config:[2,3,4,6,7,10,11,12,13,14,16,17,18,19,21,22,23,24,25,27,28,29,31,32,33,34,35,37,41,43,44],configfil:42,configur:[2,3,4,5,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,35,37,40,42,44],confirm:[40,42],conflict:16,confus:42,connect:[2,4,5,6,14,15,16,21,24,27,29,30,34,35,37,39,44,47,48],connet:[],consequ:46,consid:[4,30,32,33,35,39,42],consider:41,consist:[34,36,39,42],consol:[2,4,6,10,27,36,39],constantli:27,constitut:[10,21,35],consult:[37,38,44],contact:[28,35],contain:[1,3,4,5,28,30,32,34,35,37,42,44,46],content:[41,42,46],contest:6,context:27,continu:[30,42],contribut:40,control:[0,2,4,17,21,28,29,34,35,36,44,47,48],conv_form:29,conveni:35,convers:[27,39,44],convert:42,cooldud:30,coordin:35,copi:[1,2,5,7,15,23,27,30,42],copyright:[0,1,3,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,33,34,35,36,37,38,39,40,41,42,43,44,45,48],core:[2,3,6,7,17,18,21,27,28,42,45],correct:[3,31,35,41],correctli:[3,42],correspond:[10,29,33,42],cos:10,could:[1,21,28,34,35,37,40,41,42,44,47],couldn:42,count:21,counterpart:42,coupl:42,cours:[3,28,34,35,42],cover:[32,33,34],cpu:[21,35,42],crappi:42,crash:[3,42],creat:[0,3,4,15,16,22,27,28,29,30,33,35,40,41,42,44,45,47],creation:[29,32],credit:[28,42],cron:42,crontab:[2,3,29,42],cross:30,crotab:[],crt:[29,35,44],crypto:41,cryptograph:[19,41,42],crytopgraphi:41,ctcp:[2,6,10,21,29,30,35,42,44],ctcr:42,ctrl:42,curl:30,current:[2,4,6,7,9,15,17,18,19,24,27,29,30,32,35,36,39,42,43,44,46],custom:[16,21,28,29,32,36,42,44],cut:29,cycl:[10,21,35],cygwin:[2,37],daemon:[16,29,35],dai:[18,23,35,42,45],daili:[30,42],dalnet:[4,17,21],danc:42,danger:42,danish:35,data:[4,10,22,27,31,41,42],databas:[15,42],date:[1,4,30,32,35,42],db8:[21,30,35],dcc:[0,2,4,6,15,20,21,23,27,29,30,34,36,37,39,41,45],dead:30,deal:[35,42,48],dealloc:27,deauthent:32,debian:[30,31],debug:[3,25,27,28,35,42,44,46],dec:[15,42],decemb:[0,26,36,39],decent:27,decid:[38,41],decis:47,declar:[28,42],decreas:35,defens:28,defin:[4,6,10,11,13,17,21,27,28,30,32,33,34,35,38,42,48],definit:[28,30,31,41],degrad:47,dehalfop:[10,42,48],del_hook:27,delai:[10,15,17,28],delet:[30,42,45],deliber:44,delimit:42,deliv:42,demand:[0,4],demonstr:[6,26,42],denot:[31,42],deop:[10,42,48],depend:[27,32,33,40,42,44,48],deprec:[5,31,42],deprici:21,depth:[35,44],der:29,deriv:41,desc:[6,27],describ:[27,28,30,31,34,35],descript:[6,27,28,29,35,42,46,48],descriptivebranchnam:40,deserv:28,design:[0,2,4,19,38,46],desir:[7,27,29,30,41],despit:31,dest:[3,6,30,31,35,42,44],destin:[16,27],destroi:[0,4],detail:[3,4,6,27,30,32,42,44,46],detect:[7,21,31,37,42,44],determin:[2,3,16,27,29,30,34,37,42,44],dev:[4,30,31],devel:3,develop:[0,1,2,3,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,30,31,33,34,35,36,37,38,39,40,41,42,43,44,45,47,48],devleop:[],dict:[42,46],dictionari:42,did:[1,41],didn:[28,30,42],die:[27,29,30],died:21,differ:[1,3,4,5,10,15,21,28,31,32,35,41,42,45,46],differenti:42,diffutil:3,digest:[19,42],digit:[35,44],dinner:41,dir:[6,29],direct:[7,31,34,40,42],directli:[5,6,10,16,22,30,42],directori:[2,3,4,6,7,23,27,29,30,31,36,40,44,45],disabl:[10,17,21,35,37,42,44],disc:42,discard:[22,42],disclaim:[2,42],disconnect:[21,22,35,42],discontinu:47,discourag:17,discuss:[4,40],disk:[0,23,30,35,36,42],displai:[12,15,17,21,29,30,35,42,43,46],displaynam:27,dispos:42,dissect:28,distinguish:42,distribut:[0,1,4,30],distro:31,dload:23,dns:[6,14,35,42],doc:[0,3,4,5,6,21,28,31,35,39,42,46,47],document:[2,16,28,30,31,34,37,38,40,44,45],doe:[10,24,28,29,32,33,35,38,39,42,46,47,48],doesn:[12,14,17,30,39,42,45,46],doing:[19,21,28,35,42,43],domain:[1,14,34],don:[4,7,10,14,15,17,21,22,24,27,28,29,30,34,35,39,42,44,45],donat:[24,47],done:[5,22,27,29,30,31,34,40,41,42,47],donkei:30,dontkickop:10,dot:39,doubl:21,doubt:37,down:[0,3,4,15,34,42],downer:24,download:[3,4,5,7,15,23,35,36,42],dozen:28,dp_help:27,dp_log:27,dp_mode:27,dp_server:27,dp_stdout:27,dport:16,dprintf:27,drastic:[27,42],driven:42,dronepup:42,drop:[3,4,35,42],dropp:[],dst:6,due:[17,21,28,35,42,46],dump:[21,35,42],duplic:42,dupwait:35,dure:[3,11,22,27,29,30],dynam:[2,3,10,29,30,33,42],dynamicban:[10,42],dynamicexempt:[10,42],dynamicinvit:[10,42],each:[0,4,6,10,15,18,23,28,29,30,32,34,35,36,39,42,45,46,48],earlier:19,easi:[5,28,30,42,44],easier:[3,19],easiest:42,easili:[0,1,2,4,28,36,42],east:35,ebai:35,ecb:42,ecdsa:29,echo:[36,38,45],ecparam:29,eden:42,edit:[2,3,28,45],editor:[29,30],editplu:30,edu:[42,48],effect:[15,33,35,42],effici:[0,4,30,34,35,36],effort:[0,2,4,42],efnet:[4,17,21],egg_lang:35,eggdrop1:7,eggdrop:[1,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,33,34,37,38,41,43,44,45,47,48],eggdroptest:[32,46],egggdrop:2,egghead:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,30,33,34,35,36,37,38,39,40,41,42,43,44,45,48],egghelp:[4,30],eight:[35,42],either:[3,4,15,16,29,30,31,32,33,34,35,37,42,44,46],element:42,elimin:29,els:[28,39,42],email:[4,29,35,42],embed:42,emerg:38,emot:46,empti:[42,46],enabl:[0,2,4,7,10,12,15,17,21,23,27,28,30,34,35,36,37,38,44,45,47],enclos:[10,37,42,46],encod:[42,43],encount:[30,47],encourag:[2,30,41],encpass2:41,encrypt:[2,5,6,9,19,29,31,34,36,44],end:[3,27,35,41,42,43],endless:10,enforc:[10,29,32,35],enforceban:10,english:[35,45],enhanc:7,enjoi:41,enlarg:3,enough:35,ensur:[27,29,30,34,41,42],enter:[3,10,15,29,31,35,39,40,41,42,44,46],entir:[30,42,46,47],entitl:48,entri:[3,4,29,30,35],env:35,environ:[16,35,36,44],eof:42,equal:42,equival:[6,21,31],equivil:[],eras:[15,42],error:[4,21,27,30,35,42,47],escap:42,especi:28,essenti:41,est:35,establish:[37,42,44],etc:[0,2,4,10,17,24,27,30,32,34,35,36,42,45,48],eth0:16,ethic:35,etiquett:4,european:35,evalu:42,even:[0,4,7,15,17,27,30,33,34,35,36,39,42,47],event:[0,4,24,27,32,34,35,46,47],eventu:19,ever:[29,30,35,42,44],everi:[0,3,4,10,15,17,21,23,27,28,29,32,33,35,37,41,42,48],everydai:35,everyon:[39,42],everyth:[3,28,42],everywher:[35,37,42],evnt:[21,42],exact:42,exactli:[15,17,27,28,42],examin:27,exampl:[2,3,4,5,7,15,16,21,27,28,29,30,31,35,39,42,44,45,46,47],exceed:35,except:[4,13,21,27,35,42,44],excess:[4,10,21],exchang:29,exclud:42,exclus:[21,42],execut:[2,3,7,27,28,32,42],exempt:[0,1,2,4,10,17,24,34,36,47,48],exhaust:[42,46],exist:[0,4,15,21,27,32,41,42,46,47,48],exit:[4,6,12,15,21,42],expand:[0,2,4],expans:42,expect:[6,13,35,42],experi:[3,15,28,30],experienc:3,expir:[10,17,18,21,33,35,42,44],explain:[10,42],explan:[10,30,31,42,46],explicit:38,explicitli:[5,42,44],express:42,extend:[24,36,38,42],extens:[3,30,32],extern:[16,29,35],extra:[7,35,38],extract:[30,42],f270:30,face:47,fact:[0,4,46],fail:[14,23,35,42,44],failur:[42,46],fake:42,fals:42,famili:35,familiar:[4,28],fanci:41,fancyp:28,far:15,fast:30,faster:42,fastest:4,fatal:42,fault:27,favor:[5,22],featur:[0,2,4,7,10,17,21,22,29,30,32,35,37,38,40,42,44,47,48],februari:13,feel:[4,5,27,40],few:[24,28,30,31,35,42,47],field:[21,32,35,42,44],fifth:1,fight:10,figur:[3,30],fil:42,file:[1,2,3,4,6,7,8,9,10,11,12,13,14,16,17,18,19,20,21,22,23,24,25,26,27,28,29,32,33,34,36,37,41,43,44,48],file_receiv:42,file_send:42,file_send_pend:42,filearea:42,filedb:[15,42],filemask:6,filenam:[6,10,18,30,35,44],filepath:6,files:15,filesi:[2,6,35],filestat:6,filesystem:[15,42,48],fill:[35,40,44],filt:[27,42],find:[3,6,14,17,20,27,28,29,30,39,40,42,47],fine:[17,21,35,46],finger:[13,30],fingerprint:[29,35,44],finish:[4,15,30,42],finnish:35,firewal:35,first:[0,2,4,5,15,19,21,27,28,30,31,34,35,41,42,44,45,46],five:42,fix:[0,3,4,27,35,42],flag:[2,5,6,10,13,17,22,27,28,30,35,36,43],flagmask:46,flash:43,flat:42,flexibl:[42,44],flood:[0,4,10,13,18,21,34,35,36,42,48],floor:1,flud:42,flush:22,focus:[24,47],folder:7,follow:[3,4,5,10,15,17,21,24,27,30,31,34,35,36,38,40,41,42,43,44,45,46,47],foo:[28,29,42],forbid:3,forc:[3,10,12,15,19,22,28,35,37,42],forcefulli:44,forev:35,forget:42,fork:[31,40],form:[0,4,27,28,42,43],format:[7,21,27,29,30,31,35,41,42,43,46],forward:18,found:[2,4,27,35,42,46],foundat:1,four:[10,28,32,35,37,42,43],fourth:28,fprint:[35,44],fragil:42,franklin:1,free:[1,2,5,27],freebsd:37,freeli:[0,4],freenod:21,french:35,frequent:[4,30],fresh:35,fri:42,friend:[10,48],frim:27,from:[0,1,2,3,4,5,6,7,10,15,16,17,18,19,21,22,24,27,28,29,30,31,32,33,34,35,37,39,41,43,44,45,46,47,48],front:[10,28,30,31,42,47],ftp:[5,30],full:[3,4,5,24,30,37,42,44,46,47],fuller:1,fulli:[5,35,42,47],fun:[3,47],func:27,func_nam:27,func_tabl:27,function_to_cal:27,further:[29,42],futur:[3,17,30,41,42],fwd:18,gain:[0,4,41,48],game:[0,2,4,24,47],garbag:27,gatewai:[24,46,47],gave:30,gayteen:0,gcc:3,gener:[0,1,3,4,19,24,28,29,30,38,41,42,44,47],genkei:29,genrsa:35,geo:28,german:35,get:[6,7,10,21,22,23,27,28,31,32,35,39,48],geteggdrop:[2,4,30],getinfo:42,getop:10,gif:15,git:[2,3,30,40],github:[2,4,30],give:[3,4,10,15,21,28,30,34,35,36,39,41,42,48],given:[4,14,15,16,30,42,46],global:[2,12,16,17,21,22,27,28,33,34,46,48],globalflag:42,gmt:[35,42],gnu:[0,1,3,4,11],goe:[3,10,29,33,34,39,42,44],going:[0,4,15,21,28,31,32,42],gone:[17,42],goober:42,good:[0,15,21,24,28,30,35,42,47,48],got:42,gpl:[0,4],grab:42,grain:28,grant:[29,36,44,47],graphic:44,greater:42,gree:28,greet:[0,2,4,10,28,32],greetmsg:28,greetscript:28,grep:29,ground:35,group:[15,16,35,38,42],grown:0,gseen:[6,20],guarante:[17,32],guess:17,gui:46,guid:[2,3,28,30,31],gunzip:30,guppi:42,gzip:[11,42],had:[3,5,10,34,35,42,47],haha:4,halfop:[10,42,48],hand:[28,35,42],handi:30,handl:[28,29,33,35,41,44,46],handshak:42,hang:[6,14],happen:[28,30,33,35,42],hard:[28,35],harder:28,hardwar:[0,4],has:[0,1,2,4,5,10,14,15,17,21,28,30,31,32,33,34,35,36,37,41,42,44,46,47,48],hash:[2,5,19,30],hasn:21,hate:48,have:[0,1,3,4,5,6,9,10,12,15,17,18,19,21,22,24,27,28,29,30,31,32,33,34,35,36,37,39,41,42,44,45,46,47,48],haven:30,head:35,header:[2,4,27,28,31,44],heaven:3,held:46,hello:[17,21,29,30,35,36,42],help:[0,3,13,21,27,28,29,30,33,34,35,37,39,42,43,48],helper:3,henc:[7,27,42],here:[2,4,10,13,14,15,17,18,21,23,28,29,30,33,34,35,42,45,46],herself:4,hidden:[15,30,36],hide:[6,37,42],high:45,higher:[17,19,22,23,30,44],highest:42,highli:[3,21,30],highlight:48,him:1,himself:4,hint:28,his:[21,30],histor:42,histori:46,hit:42,hold:[22,42],hole:35,home:[3,15,16,29,30,44],hook:27,hook_5minut:27,hook_backup:27,hook_daili:27,hook_di:27,hook_hourli:27,hook_idl:27,hook_load:27,hook_minut:27,hook_num:27,hook_pre_rehash:27,hook_read_userfil:27,hook_rehash:27,hook_secondli:27,hook_userfil:27,hope:[30,47],hopefulli:[3,42],hors:30,host:[0,2,4,10,16,21,24,28,33,34,35,44,46,48],hostmask:[28,29,33,34,36,41],hostnam:[6,10,14,29,35,37],hosttarget:[24,46],hour:[6,25,27,33,35,42],hourli:[18,27,35],how:[0,3,6,10,13,14,15,18,21,22,24,28,29,30,31,33,34,35,42,44,45,46,47],howev:[4,7,13,21,29,31,32,35,41,42,44,45],htgt:46,html:[4,37],http:[2,4,6,20,25,30,32,38],hub:[4,22,30,34,35,41,44],hubbot:31,hubcap:48,humor:29,hup:42,hurt:5,iconfig:[3,7,30],idea:[28,30,40],ideal:[41,47],ident:[2,6,7,17,21,29,35,37,41,42],identd:[16,30],identifi:[29,35,41,42,48],idl:[10,27,42],idx:27,ignor:[0,4,13,21,22,28,34,35,36,42,46],ill:42,imag:4,immedi:[21,30,32,41,42],imperson:16,implement:[6,7,16,31,32,35,38,40,41,42,47],implementatino:31,impli:[1,27],importantli:28,improv:[0,4],inact:[10,23],inc:1,incess:0,includ:[0,2,3,4,7,17,25,27,29,30,31,33,35,36,37,41,42,44,46,47],incom:[15,35,42],increas:[32,35,41],incred:[30,42],independ:7,indic:[21,27,30,42,46],infeas:[24,47],infin:35,infinit:15,info:[3,4,10,12,17,27,30,35],inform:[0,2,3,4,5,6,10,15,25,27,28,29,30,32,34,35,37,38,42,44],infrastructur:44,ing:[17,24,47],init:[21,35,42],init_serv:21,initi:[27,28,30,37,38,42,44],input:42,insecur:10,insensit:42,insert:[10,43],insid:[28,35],instal:[0,4,5,28,29,31,35],instanc:[10,32],instantli:21,instead:[1,4,5,10,15,16,17,22,24,30,35,41,42,44,45,47,48],instruct:[7,30,41],integ:[10,42],integr:2,intend:[3,33,42],intens:21,intent:[24,47],intention:28,interact:[3,4,6,16,17,35,42,44,47],intercept:42,interchang:[31,37],interest:4,interfac:[2,24,42,47],intern:[21,32,35,42,46],internet:[0,4,42,44],interpret:[3,37,42,43],interv:42,introduc:[4,30,42],invalid:42,invers:43,invit:[0,2,4,10,17,24,34,36,38,47],invite:42,invok:42,involv:29,invt:42,ipaddress:42,iptabl:16,ipv4:[30,35,37],ipv4address:42,ipv6:[2,30,35,36,42],ipv6address:42,irc:[0,4,6,15,16,21,24,28,29,30,32,33,34,35,36,37,38,39,42,43,45,46,48],ircawai:42,ircd:[17,21,42],ircii:[23,42],ircnet:[4,10,17,21],ircop:[10,17],ircu2:17,ircv3:[2,32,36,42,45],isn:[6,15,21,22,25,30,33,42],isol:34,isop:10,isoptest:10,isp:30,isset:32,issu:[4,5,16,24,30,32,35,40,42,44,46,47],issuer:44,issupport:32,istn:10,isupport:32,ital:42,item:42,its:[1,2,4,7,10,15,16,17,19,21,22,24,28,30,32,34,35,36,40,42,45,47],itself:[15,27,28,29,35,42],itsself:[],j9irk4vs28b0obz9easys4w2ystji3u:47,jan:[42,44],janitor:[15,48],januari:[1,8,9,12,18,20,23,25,42],jkp:30,job:44,john:1,join:[2,6,10,12,17,18,24,28,30,31,33,35,36,38,39,42,46,47,48],jpk:35,jul:7,juli:0,jump:[21,34,44],jun:45,june:16,jupe:42,just:[0,3,4,5,6,14,15,17,19,22,27,29,30,32,34,35,39,41,42,45,46,47],karma:40,keep:[2,4,10,15,21,23,30,35,47],kei:[2,3,10,17,24,28,29,35,41,46,47],kept:[33,35],keyout:[29,44],keypair:[29,31],kick:[10,17,21,32,35,42,45,48],kicker:42,kiddi:35,kill:[30,42],killer:5,kilobyt:[15,35],kind:42,know:[17,18,21,24,27,28,32,33,34,35,42,45,47],knowledg:0,known:[21,29,35,41,42],kreativrauschen:[6,20],kvirc:44,lag:[35,39],lame:[10,17,34,35,42],lamer:35,lameshar:34,lamest:[10,30,34,35,43],lamestbot:[3,10,18,21,30,34,35,42,43],lang:45,languag:[28,35,36,45],larg:[2,15,17,21,35],larger:[28,41],last:[0,5,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,30,33,34,35,37,38,39,42,43,44,45,46,48],lastli:42,laston:42,late:42,later:[1,3,6,9,18,19,25,28,30,35,42,44],latest:[4,5,30],launch:30,layer:[29,31],lazi:17,leaf:[34,35,41,44],learn:[17,29,30,35,36,42],least:[4,17,27,30,33,35],leav:[10,21,30,35,39,42,47],left:[17,42],legal:[2,4],len:21,length:[17,21,27,41,42,44],less:[13,39,42],let:[4,6,10,14,18,27,28,30,34,35,36,42],letter:[4,35,48],level:[11,16,29,32,35,48],libera:[2,4,5,21,27,28,29,30],librari:[28,41,44],libssl:[4,30,31],licens:[0,1,4],lieu:42,life:[18,30],light:47,like:[0,1,4,6,9,10,13,15,17,19,27,28,29,30,35,36,37,39,40,41,42,44,46,47,48],limbo:35,limit:[2,6,10,15,17,21,34,37],lindex:42,line:[2,3,5,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,32,34,35,36,41,42,44,45,46,47],link:[0,2,3,4,5,6,7,15,22,23,27,35,36,38,41,44,45],linux:37,list:[0,4,6,10,14,15,19,21,22,24,25,27,28,29,30,31,32,34,35,36,38,39,44,46,47],listen:[29,30,34,35,37,44],liter:[27,42],littl:[3,5,15,24,30,34,45],llama:34,llamabot:[30,35],load:[6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,32,34,35,41,42,47],loadmodul:[8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,35,41,47],lobster:41,local:[15,28,30,35,39,40,42,44],localfil:6,locat:[2,4,23,28,29,31,35,44],log:[0,2,4,10,19,24,27,30,32,40,41,42,47],logfil:[25,27,30,35,45],logfilenam:35,logflag:35,logic:42,login:[30,35,41,46],logmod:27,logsiz:35,longer:[3,5,15,17,19,27,30,31,42],look:[0,4,5,6,10,20,25,26,28,29,31,32,35,36,41,42,44,47],lookup:[14,35,37,42],lose:10,lost:42,lot:[5,17,28,30,32],low:[21,23],lower:21,lowercas:21,lsa:15,luck:[30,47],lurk:2,mac:37,machin:[3,16,30,35],macro:27,made:[0,1,3,4,5,10,22,40,42,44,47],magic:28,mai:[1,4,5,10,11,15,16,17,23,28,30,34,35,37,38,42,45,46,47],main:[7,28,30,31,32,39],maintain:[2,16,30,32,45,46],mainten:48,major:[27,30,42],make:[0,2,3,4,5,6,7,10,13,15,19,21,22,24,27,28,29,30,31,35,37,38,40,42,44,45,47],makefil:[3,27],making_modulenam:27,man:35,manag:[2,4,6,15,24,31,47],mandatori:42,mani:[4,5,10,14,15,17,21,27,29,30,31,34,35,42],manipul:[2,35],manpag:35,manual:[4,29,34,35,37,42,44,46],mar:37,march:[33,43,48],mark:[15,36,42,48],mask:[15,21,28,35,46],masquerad:35,master:[15,29,30,33,34,35,42,43,48],match:[1,2,10,15,17,27,28,33,35,41,44,46],math:42,matter:[1,14,28,29],max:[15,17,18,21,23,35],maxdepth:[],maxim:35,maximum:[10,14,15,17,18,21,23,35,41,42,44],maxsend:14,mayb:[28,35],mco:[35,42],mcobx:30,md5:[6,9],mean:[15,17,21,28,29,32,33,34,35,36,37,41,42,44,46],meaning:[24,42,47],meaningless:48,measur:21,mechan:29,meet:44,mem:42,member:[10,27,32],memberlist:42,memori:[27,42],mention:27,meridian:35,messag:[4,10,21,27,28,30,32,35,36,38,39,41,43,45,46],method:[4,6,9,16,17,19,24,28,29,30,31,41,45,47],midnight:35,might:[4,17,23,27,35,42,44],migrat:5,militari:35,milk:48,min:35,miniatur:39,minimum:[0,10,42,46],minor:[27,42],minu:10,minut:[4,10,17,23,27,29,30,33,35],mirc:[21,42],misc:[35,42],miscellan:2,misnom:42,miss:[4,30,32,42],mix:[10,17],mkcoblx:35,mkdir:6,mnnrrpp:42,mnot:22,mnt:30,moc:42,mod:[3,6,7,20,24,27,35,42,46],mode:[4,5,10,13,17,21,24,27,29,32,33,35,36,38,47],mode_proc:42,mode_proc_fix:42,modechang:42,moder:[24,29,46,47],modern:[16,41],modes_per_line_max:17,modif:[5,30,42],modifi:[2,6,14,17,28,32,35,42],modul:[0,2,4,30,32,34,36,41,47],modular:2,module_clos:[],module_depend:27,module_entri:27,module_expmem:[],module_find:27,module_load:27,module_nam:27,module_regist:27,module_renam:27,module_report:[],module_start:[],module_t:[],module_undepend:27,module_unload:27,modulenam:[7,27],moment:[17,30,31],monitor:[33,36,38],month:[35,42],moo:42,more:[3,4,5,6,13,15,17,20,27,28,29,30,31,34,35,36,38,40,41,42,44],moreov:35,most:[0,2,4,5,16,17,21,27,28,29,30,31,35,36,39,42,46,47],mostli:[24,42,47],motd:[35,43],mount:23,move:[3,4,15,21,30,42,47],mpj:42,mrlame:[30,35],mrslame:[30,35],msg:[4,6,17,20,21,29,30,35,36,39,41,46],msgid:46,msgm:[21,42],much:[2,3,24,27,30,39,42],multi:30,multipl:[0,2,4,16,28,30,34,35,36,42,46],must:[1,2,3,4,10,14,16,17,21,23,27,29,30,31,32,34,35,41,42,44,46],mydir:15,myownevent123:42,myproc:42,mytag:42,myvar:45,myword:17,name:[3,4,6,8,15,21,27,28,29,30,31,32,35,46],nano:30,nat:[16,35,37],natur:46,nearli:7,necessari:[10,31],necessarili:42,need:[0,3,4,10,14,16,17,21,27,28,29,30,31,32,34,35,37,41,42,44,46,47,48],needal:42,needop:42,neg:[14,35,42],negcach:14,negoti:[42,44],net:[1,3,17,21,24,30,32,38],netbsd:37,nethack:48,netsplit:[16,17,35,36,42],network:[0,2,4,17,21,35,42,43],never:[4,5,10,35,42],new_module_nam:27,newer:[5,30],newhandl:42,newidx:42,newnick:42,newus:[30,35],next:[5,10,15,21,27,28,30,31,35,42],nfree:27,nice:27,nicebot:30,nick:[10,17,21,25,28,29,30,35,48],nicknam:[6,21,28,29,30,32,35,43,45,46,48],nickserv:[2,44],nist256p:29,nkch:42,nmalloc:27,no_irc:[6,21],nobodi:[15,28],node:[29,44],nodesynch:10,noemail:4,non:[3,10,14,16,17,21,27,29,33,34,42,44,47],none:[8,9,10,12,14,18,19,20,21,23,26,42],noout:29,noqueu:42,nor:16,normal:[0,4,6,13,14,15,16,21,27,28,31,35,42,44,45,46,47],notabl:47,notat:35,notc:42,notcproc:42,note:[2,3,6,7,9,10,14,17,19,21,22,27,29,30,32,34,35,41,44,46,47],notebox:42,notefil:[18,42],notepad:30,noth:[27,35,42,47],notic:[2,13,15,28,34,35,42,47],notif:42,notifi:[18,21,30,35,36,38,42],nots:1,nov:34,novemb:[22,38],novic:[0,4],now:[3,5,15,16,17,28,29,30,31,34,35,37,41,42,46,48],ntik:42,number:[2,10,15,17,18,19,21,23,24,27,30,31,34,35,41,42,44,46,47,48],numer:[29,31,42],nxdomain:14,oauth:47,obtain:[2,31,44],obvious:[33,42],occur:[17,28,42],occurr:27,octal:35,octob:[10,19,21,35],off:[10,16,17,21,30,34,35,39,42],offer:[30,31,32,46,47],offici:[2,4],offlin:42,offset:35,often:[4,6,14,29,35,46],oident:16,oidentd:16,okai:35,old:[6,19,21,30],old_module_nam:27,older:[4,37,42],oldest:[2,42],oldhandl:42,omin:28,omit:[42,44],onc:[4,10,15,17,19,21,28,29,30,40,42],one:[4,10,15,16,17,21,27,28,29,30,31,33,34,35,36,39,40,41,42,44,45],ones:[14,22,34,37,42],onjoin:18,onli:[3,4,5,6,7,10,15,16,17,18,20,21,22,25,26,28,29,30,32,33,34,35,37,39,41,42,43,44,45,46,48],onlin:[6,15,18,29,32],opchar:17,open:[16,29,35,39,40,42,44],openbsd:37,openssl:[2,3,4,19,29,30,31,35,44],oper:[13,21,28,35,37,42,43],opped:[10,42,48],opping:[0,4],oppos:42,ops:[10,32,42,48],optim:[6,21],optino:38,option:[1,3,4,7,10,15,16,19,21,29,30,35,44,47],order:[4,14,28,32,35,41,42,44,46],ordinari:[42,44],org:[2,4,5,6,25,28,30,31,34,35,42],origin:[1,21,30,40,42],oss:16,other:[0,1,4,6,9,10,14,15,16,17,18,19,21,22,27,28,29,30,31,33,34,35,36,37,38,39,41,42,43,44,45,46,47,48],otherdir:3,otherwis:[3,4,12,15,28,32,33,34,35,37,41,42,44,46],our:[30,34,42],ousterhout:1,out:[0,3,4,23,25,28,29,30,34,35,39,41,42,44],outform:29,outgo:[35,42,45],output:[2,3,27,29,31,41,43,45,46],outsid:[19,31,35],over:[15,21,24,27,28,30,35,37,42,44,45,47],overal:32,overhead:7,overrid:[22,37,44],overridden:17,overwrit:[16,30,42],overwritten:[5,35,42],own:[1,7,15,16,21,22,28,29,30,31,38,42,44,45,47],owner:[4,10,30,35,39,42,48],p_tcl_hash_list:27,packag:[1,3,4,30,31],pad:42,page:[30,40],pai:[5,32,42],pain:[23,30],pair:[29,31,32,42,44,46],paragraph:3,paramet:42,paranoid:[22,35],pars:42,part:[0,4,21,24,28,35,36,42,44,45,47],parti:[2,5,12,30,34,35,36,42,44,48],particular:[5,29,35],partproc:42,partylin:[2,4,6,12,30,31,32,34,35,37,41,42,44,45,46,47,48],pass:[28,29,30,32,37,39,41,46],passiv:34,passthru:35,password:[5,6,9,17,19,21,22,29,30,34,35,36,39,41,44,47],past:[1,4,27,35],patch:[2,37,42],path:[2,3,15,16,30,31,42,44],pathnam:42,patient:15,pbk:41,pbkdf2:[2,5,6,41],peer:[21,35,44],pem:[29,35],penalti:21,pend:[6,10],peopl:[4,10,15,16,17,18,21,22,28,30,35,36,39,42,43,48],per:[17,42,46],percent:43,perfect:32,perform:[0,3,4,5,10,30,42,48],perhap:30,period:[6,14,30,42],perm:35,perman:[10,33,35,42],permiss:[4,35,41],permit:42,perorm:2,persist:30,person:[4,28,30,35,42],phew:30,phrase:42,physic:34,pick:42,pictur:5,pid:[30,35,42],pidfil:35,piec:[3,28],ping:13,pipe:34,pl1:42,place:[1,3,5,7,10,15,17,28,30,33,35,42,44,47],plain:[29,35,44],plaintext:[29,42,44],plan:[4,28,42],platform:[0,4,24,42,47],pleas:[4,5,6,7,9,10,16,19,21,31,35,38,42],plu:[10,21,35,42,44],pmsg:28,point:[3,6,21,26,30,34,35,42],pointer:[1,3,4,36,43],popul:46,popular:[0,4,5,30,35],port:[1,5,14,16,21,22,29,30,31,34,35,37,44],portabl:42,portion:[3,7,10,42],portrang:35,posit:[27,35],posix:42,possibl:[3,10,13,15,21,29,31,35,37,38,39,42,44,46],potenti:[5,16,28,42,46],pour:40,power:[4,36],practic:[41,42],pre:[42,44],preced:[30,42,44],prefer:[35,37,44],prefix:[5,17,21,28,31,35,39,44,46,47],preinit:42,prematur:30,prepar:34,prepend:35,prerehash:42,prerequisit:2,prerestart:42,prerout:16,present:[2,6,28,29,32,37,42,46,47],preserv:30,pretend:47,pretendnet:31,pretti:[0,39],preval:29,prevent:[0,4,10,17,18,24,30,34,37,42,47],previou:[1,3,4,5,19,30,42,47],previous:[5,30,42],primari:[21,35],prime256v1:29,prime:35,printf:27,prior:[3,29,30,32,41,44],prioriti:42,privat:[18,22,28,29,30,31,35,39,42,44],privatekei:[29,31,35,44],privileg:[0,4,16,48],privmsg:[10,28,29,42],probabl:[4,21,29,30,31,42],problem:[30,35,37],proc:[21,27,28,46],proce:42,procedur:[2,22,32,46,48],process:[0,3,4,5,11,15,16,23,29,30,34,41,42,44],procnam:[28,42,46],produc:[35,42],program:[0,2,4,16,29,30],progress:15,prohibit:35,project:[2,40,47],prompt:[3,4,32],promptli:30,proper:[3,37,42],properli:[5,30,31,34,35],protect:[0,2,3,4,10,19,21,29,30,33,35,41,42,44,48],protectfriend:10,protecthalfop:10,protectop:10,protocol:[31,35,38,42,44],prove:30,provid:[0,2,4,5,6,7,8,10,11,12,13,14,15,16,17,18,20,21,22,23,24,27,29,30,35,37,38,40,42,44,46,47],pseudo:42,pub:[4,5,21,29,32,42],pubkei:29,publicli:25,publish:35,pubm:[21,42],pull:[4,40,41],punish:[10,42,48],purpos:[0,1,6,25,26,34,35,42],push:[40,42],put:[1,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,30,35,42,44],putlog:[21,27,28],putquick:21,putserv:[10,28,29],putti:29,pwd:[6,30],quakenet:[4,21],qualifi:35,quann:[6,20],queri:[14,16,32,37],question:[4,29],queu:[15,21,42],queue:[21,27],quick:[2,27,30,35],quicker:30,quickli:[2,35],quiet:[21,35,48],quit:[4,6,21,30,35,42],quot:[42,46],quota:35,raid:[24,47],rais:[10,21],ram:35,rand_max:42,random:[10,21,34,42],rang:[30,35],rate:21,rather:[5,42,44],raw:[32,35,44],rawt:42,rcvd:42,reach:[17,21,35],react:[28,32],read:[0,2,3,4,6,7,16,27,28,29,30,31,35,42,43,47],readabl:42,readm:[2,3],readonli:27,real:[21,27,42],realli:[28,30,35,45],realnam:[21,42],reason:[4,27,29,30,34,35],reboot:[16,29],receiv:[14,15,21,23,29,34,42,46],recent:[4,30,42,44],recev:[],recipi:42,recogn:[17,21,29,48],recom:[],recommend:[4,5,10,23,27,30,41,42,45,46],recompil:[17,30],reconnect:[22,42],record:[2,22,27,32,36,48],redirect:16,reduc:[27,46],refer:[27,28,31,35,42],refin:28,reflect:[5,42],refresh:[42,46],regardless:42,regist:[2,10,29],regular:[10,42,44],regularli:36,rehash:[7,27,28,35],reiniti:42,reject:[21,34,35],rejn:42,rejoin:[30,42],rel:[14,27,30,42],relai:[0,4,34,35],relat:[1,6,10,28,37,42],releas:[0,1,30,41,42],relev:[4,27,30],reli:42,reliabl:[32,42,46],relink:34,relinquish:42,rem_builtin:27,rem_tcl_command:27,rem_tcl_int:27,rem_tcl_str:27,remain:[10,33,42],remaind:[15,46],rememb:[10,28,29,30],remind:35,remot:[15,34,35,42,43],remotebotnam:42,remov:[5,10,15,19,27,29,30,33,36,37,41,45,46,47],renam:[2,15,27,30,35,42],render:[5,24,47],repeat:[4,32,42],replac:[10,21,27,29,35,42,43,47],repli:[6,13,14,16,17,32,35,42],replic:[46,47],repo:40,report:[6,15,25,27,30,45],repositori:[4,30],repres:[42,46],req:[29,35,44],request:[0,4,5,7,10,13,15,17,21,30,32,33,35,37,38,40,42,44,45,47],requir:[2,4,5,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,29,30,35,41,44,46],reread:42,resend:[14,42],reserv:[30,35,39],reset:42,resolut:35,resolv:[6,14,35,42],resourc:27,respect:[14,37,42,43],respond:[10,30,42],respons:[21,32,42],rest:[3,27,34,35,41,42,46],restart:[2,3,4,5,7,28,30,35],restrict:[1,15,16,21,35,42,43,47],result:[21,32,33,35,37,42],resum:42,resync:22,retain:42,retri:23,retriev:[6,18],retrydelai:14,reus:[5,42],reveng:10,revengebot:10,revers:[41,42],revert:42,review:[29,31],revis:[0,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,33,34,35,37,38,39,42,43,44,45,46,48],revok:[21,35],rfc1459:[38,42],rfc2812:38,rfc:[17,21,24,42,47],rfc_compliant:42,rich:[0,4,30],right:[6,15,16,26,28,30,42],rijndael:19,risk:[1,21],rizon:21,rmdir:6,rmst:46,robei:[1,3,4,36,43,48],robot:36,roomsstat:24,roomstat:[24,47],root:[15,16],round:[19,41],rout:[16,42],routin:[17,35,42],rsa:35,rule:30,run:[2,3,4,5,7,10,16,21,27,28,29,30,31,32,34,35,41,43,44,46],s_client:44,safe:[19,29,30,31,41,47],sai:[4,10,15,28,31,34,42],said:[28,34,42],sake:47,salt:[28,41],same:[0,3,4,5,7,10,11,16,17,27,28,30,32,34,35,38,41,42,43,44,45,46],sampl:[10,30,47],sane:21,sanitycheck:35,sasl:[2,30,36,38],save:[5,6,10,11,12,22,34,35,36,41],scan:30,scenario:[31,32,34],schat:[35,44],schedul:42,scheme:1,scope:31,screen:[4,40,43],script:[0,2,3,4,7,10,21,29,30,33,36,37,42,45,46,47,48],scripter:34,sdcc:44,sdebug:3,seamless:41,seamlessli:19,search:[27,29,42],sec:35,second:[4,10,13,14,17,21,23,27,28,35,45],secondli:42,secret:10,section:[5,10,17,21,24,28,30,34,35,42,47],secur:[0,2,4,6,9,19,29,30,34,35,36,41,42],see:[0,2,3,4,5,6,10,15,17,21,24,25,27,28,29,30,31,32,34,35,37,39,40,41,42,43,46],seen:[2,6,10,32,35,42],selecet:42,select:[4,30,35,36,40,42],self:[2,21,31,35,44],send:[4,6,11,15,17,18,21,22,23,27,28,30,32,34,37,42,45,46],sender:42,sens:[0,4],sensit:41,sent:[6,15,17,22,25,29,32,35,38,39,42,44,46,48],separ:[3,7,21,30,34,35,36,37,38,42,45,46],septemb:14,seri:[30,42,44],serv:35,server:[2,5,6,7,10,13,14,15,16,17,19,24,25,27,29,30,35,36,37,38,44,45,46,47],serverlist:42,serverop:10,serverror:21,servic:[6,10,16,24,29,32,42,44,47],servivc:42,session:[4,37,38],set:[0,1,2,3,5,6,10,11,12,13,14,15,16,17,18,19,21,22,23,24,27,28,31,32,33,34,36,38,39,41,43,45,46,47,48],setcap:16,setnam:[36,38],setup:[4,6,7,30,35],seven:[10,42],sever:[0,4,13,27,30,31,38,42,45],sexystuff:28,sha1:44,sha1sum:29,sha256:19,shall:35,share:[0,2,4,6,10,11,23,27,35,36,42],sharebot:[34,35,42],sharefail:23,she:42,shell:[0,3,4,16,29,30,35,42],shorter:10,should:[1,3,4,5,10,12,13,14,15,17,19,21,22,24,27,28,29,30,34,35,37,39,41,42,44,46,47],shouldn:16,show:[4,6,10,15,25,28,34,35,42],shown:[15,30,35],shutdown:42,shutdownreason:42,side:[35,42,44,47],sidenot:31,sighup:42,sigil:42,sigkil:42,sign:[21,29,31,35,42,43,44,47],signal:42,signific:[4,6],significantli:[32,46],signoff:42,sigquit:42,sigterm:42,silent:35,simialar:[],similar:[4,10,29,30,35,39,40,42,45],similarli:46,simpl:[4,27,28,29,30,42],simpli:[4,5,29,30,31,38,42,47],simplifi:42,simul:[35,42],simultan:[15,23,42],sinc:[0,3,5,17,30,34,35,36,37,42,44,45],singl:[16,17,29,42,46],sit:[0,4,10,35,41],site:[6,48],situat:[32,34],six:42,size:[15,23,27,35,42],skim:4,skip:[30,42],slash:[30,39],slave:34,slennox:30,slow:[15,30,35],slower:35,small:[3,23,34,45],smaller:3,smile:3,snapshot:[2,30],snowbot:15,snt:29,sock:[27,35],socket:[16,27,31,42,44],softwar:[0,1,2,4],solut:41,some:[0,4,5,10,11,12,13,14,15,16,17,18,19,21,22,23,27,30,32,33,34,35,36,37,38,42,44,45,47,48],someircnetwork:35,someon:[4,10,17,28,30,31,42,46],someth:[4,28,30,40,42,47],sometim:[4,21,30],somewher:[3,35],song:42,soon:[10,42],sort:[0,4,33],sound:28,sourc:[1,3,4,5,6,7,27,28,31,35,40,42,44,45],space:[0,23,35,38,42],spawn:0,spec:32,special:[34,42],specif:[6,10,14,16,17,19,21,24,30,34,37,38,42,44,46,47,48],specifi:[10,14,15,16,18,21,22,27,29,30,33,35,36,37,41,42,44,46],spectrum:[24,47],spent:[30,42],split:[10,17,37,39,42,43],splt:42,spoiler:47,spoken:42,spoof:16,spread:35,squar:37,squelch:21,src:[3,7,17,27],ssh:30,ssl:[2,3,4,5,21,29,30,31,36,42],sslcert:[3,31,35,44],sslinc:44,ssllib:44,sslport:44,sslsilent:[3,44],sssss:[],stabil:23,stabl:[2,4,30],stack:[17,37,42],stackabl:[],stage:27,stai:42,stall:42,stand:[0,4,30],standard:[14,16,17,23,27,28,38,42,44,47,48],start:[2,3,4,5,6,9,16,19,21,26,28,29,34,35,38,39,41,42,43,46,47],starttl:44,startup:[2,41,42],stat:6,state:[4,42],statement:42,statist:[6,15,25],statu:[0,2,4,10,24,27,31,35,45,46,47],status:32,statuslog:10,stb:21,stdio:27,stdlib:27,stdout:27,stealth:[30,35],step:[2,3,5,27,30,47],stick:33,sticki:[33,42],still:[1,4,5,10,15,22,30,31,32,35,36,42,47],stone:21,stop:[0,10,15,17,27,42,46],stopnethack:[10,48],storag:[6,12,41],store:[5,6,10,12,15,18,24,25,28,30,32,34,41,42,46,47],str_dir:27,str_protect:27,stream:[24,47],street:1,strftime:35,string:[2,17,27,28,29,35,41,46,47],strong:35,strongli:[2,4,30],stuff:[2,4,27,28,30,35,42],style:[33,42],sub:[15,42],subdirectori:[15,42],subject:44,sublist:42,submit:[2,42],subscrib:[46,47],subsequ:42,substitut:[2,35],succeed:42,success:[27,30,42],successfulli:[4,27,42,46],sudo:[16,30],suffic:28,suffici:31,suffix:[7,35],suggest:[5,27],suit:[16,30],suitabl:46,sum:28,summar:21,sun:35,sundai:42,supplant:42,supplementari:32,suppli:35,support:[0,2,3,4,5,6,8,10,11,14,16,17,18,21,22,23,29,30,31,33,35,36,42,45,47],sure:[4,10,27,28,30,31,34,35,42,47],symbol:[31,42],synchron:44,syntax:[5,29,35,44,48],sys:27,system:[2,3,7,14,15,16,27,29,30,35,36,37,42,43,44],tab:27,tabl:[27,38,42],tag:[15,36,38,46],tail:29,take:[3,4,5,6,15,19,21,25,28,30,35,41,42,44],taken:[27,42],takeov:17,talk:[28,31,32,36,39],talli:27,tar:[4,7,30],tarbal:[0,30],target:46,task:[0,2,4,34],tcl:[0,1,2,3,4,6,10,11,21,27,28,30,33,35,36,37,44,45,47],tcl_cmd:27,tcl_int:27,tcl_string:27,tclsh:4,tcltk:4,tcp:[2,16,37],team:[0,1,2,3,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,33,34,35,36,37,38,39,40,41,42,43,44,45,48],technic:47,techniqu:45,tell:[15,28,29,30,31,32,34,35,42,47],telnet:[2,29,30,34,36,37,39,41,42,43,44],temp:42,templat:40,temporari:[10,23,25,33,35],ten:29,term:[2,28,31,42],termin:[4,5,42],test:[28,30,48],text:[4,10,21,27,29,35,43,44,45,46,48],textfil:2,than:[4,10,13,15,17,30,31,35,41,42,44],thank:4,thee:42,thei:[0,3,4,5,7,10,12,13,17,18,21,22,27,28,29,30,31,32,33,34,35,41,42,44,46],them:[0,1,3,4,5,7,10,12,13,14,15,17,18,21,22,23,27,28,29,30,31,34,35,36,37,38,41,42,45,47,48],themselv:[17,30,34,42,45],therebi:[45,47],therefor:[6,17,30,35,42],thi:[0,1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,40,41,42,43,44,45,46,47,48],thing:[3,4,6,24,26,27,28,29,34,35,42,47],think:[40,48],third:[28,34],thorough:[27,29,31,47],those:[1,3,7,11,15,21,27,28,29,30,42,45,46,47],though:[15,21,28,30,42,44],thr:35,three:[21,29,32,33,34,35,42],through:[4,10,15,21,24,28,31,36,37,38,39,42,47,48],throughout:27,thse:[],thu:[16,28,32,37,41,42],tidi:27,ties:42,till:[],time:[0,3,4,10,14,15,16,17,19,22,23,28,29,30,31,32,33,34,35,36,38,39,41,43,44,45,47],timeout:[6,14,21,23,35,46],timestamp:[35,42],timezon:35,tip:[2,42],titl:48,tiwtch:6,tls:[42,44],tmi:46,tmp:[23,42],toctre:[],todai:42,togeth:[0,2,4,21,28,34,35,36,38,42],token:47,told:28,ton:24,too:[15,17,21,23,27,35,42],tool:[3,30],top:[3,4,28,40,42],topc:42,topic:47,total:[10,27,36,42],tout:42,toward:28,trace:21,track:[2,3,15,24,27,29,42,47],tradit:[24,37,45,46,47],tradition:16,traffic:[3,35,45],trail:27,transfer:[2,6,7,11,15,22,30,34,35,37,42,44,48],transit:[19,41,42],transmit:21,transpar:35,transport:31,treat:[42,47],tree:[0,4,30],tri:[27,35,42],trick:[28,45],trigger:[10,21,27,28,32,42,46],troubl:[14,35],troubleshoot:[4,30],truncat:46,trust:[4,35,48],ttl:14,turbo:[23,30],turn:[10,16,21,35,42],tutori:[2,31],twcmd:[24,47],twice:42,twitch:[2,6,36],twith:46,two:[4,6,17,22,28,30,32,33,34,35,41,42,44,45],type:[3,4,6,7,10,12,17,21,24,27,28,29,30,31,32,33,34,35,36,37,38,39,44],typic:[15,24,35,36,39,42,47],typo:42,ubuntu:31,ufl:42,ugli:15,uglyman:15,uhost:[28,42],uid:[35,44],umod:21,unabl:[17,30,34,37,42,47],unaccess:36,unavail:[21,35],unban:[10,35,42],unbind:[17,35,45,46],uncertainti:46,uncom:[29,31,35,41],under:[0,4,30,36,42],underli:42,underlin:[42,43],undernet:[4,17,21,42],understand:[35,42],understood:21,unexpect:42,unhid:6,unimport:35,unintend:46,uniqu:[35,42,46],univers:35,unix:[0,3,15,16,30,36],unknown:42,unld:42,unless:[17,21,28,30,33,35,42],unlik:[3,36],unlimit:34,unlink:[23,35],unload:[27,42],unoffici:37,unpack:0,unreach:34,unrealircd:[17,42],unreli:[24,46,47],unrest:0,unset:42,unshar:[6,48],unstick:33,unsticki:33,unstuck:42,unsur:30,untar:5,until:[7,10,15,33,35,42],unzip:[5,30],updat:[4,5,19,27,30,32,35,36,41,42,46],upgrad:[2,41,44],uplink:42,upload:[15,30,36,42,45],upon:[0,4,46,48],upper:14,uptim:[2,6],url:[35,42],usa:1,usabl:[6,15,35],usag:[2,4,6,27,35,42],use:[0,1,3,4,5,6,7,9,10,12,13,14,15,16,17,19,21,22,23,27,28,29,30,31,33,34,35,37,39,41,42,43,44,45,46,47,48],used:[0,2,4,10,11,13,15,19,21,27,28,29,30,31,33,34,35,36,37,39,41,42,43,44,45,46,47,48],useful:[1,4,10,23,30,34,42,44,45],useless:[5,24,47],user:[0,2,3,4,5,6,7,9,10,11,12,13,16,17,18,19,20,21,22,23,24,27,28,30,31,32,33,35,36,37,39,40,41,43,44,45,46,47],userban:10,userexempt:10,userfil:[0,2,4,5,6,9,10,11,19,22,23,27,29,30,34,35,41,42,45],userflag:17,userhost:46,userinfo1:35,userinfo:[13,42],userinvit:10,userlist:[6,17,20,22],usernam:[16,29,30,35,46,47],usernotic:[24,46],userst:[24,47],uses:[3,6,17,21,23,27,28,29,30,31,33,35,41,42,44,47,48],using:[1,3,4,6,7,9,10,15,16,17,19,21,27,28,29,30,33,34,35,37,41,42,44,45,46,47],usrntc:46,usst:46,usual:[4,29,30,31,33,37,40,41,42,44,47],utc:35,util:3,utim:28,vagu:30,vali:42,valiant:[0,4],valid:[3,10,21,27,34,35,36,42,44],valis0:42,valu:[10,13,14,17,21,24,27,28,35,41,43,44,46,47],vari:[42,48],variabl:[2,5,10,11,12,13,14,15,16,17,18,19,21,22,23,27,28,32,35,37,43,46],variable_nam:27,varieti:[0,4],variou:[1,27,30,33,35,42],verbos:42,veri:[4,6,16,20,21,28,35],verif:[21,35,44],verifi:[21,29,35,44],version:[0,1,2,3,4,5,13,17,25,27,28,37,38,43,44,46],vertic:42,vhost4:[30,35,37],vhost6:[30,35,37],vhost:[30,35,37],via:[2,3,4,6,11,16,17,20,22,27,28,29,30,32,33,34,35,36,37,38,39,41,43,44,46,47],video:42,view:[5,7,19,29,30,36,42,46],viewer:46,vim:30,vip:[46,47],virtual:35,visibl:42,visit:[5,47],vista:37,voic:[0,2,4,10,29,42,48],wai:[1,3,4,16,21,24,27,28,29,30,31,32,33,34,35,39,41,42,44,47],wait:[6,14,15,17,21,23,30,32,35,42],walk:31,wall:42,wallop:[35,42],want:[0,3,4,6,10,12,14,15,17,18,21,23,27,28,29,30,34,35,37,42,44,45],war:0,warm:40,warn:[4,16,28,42],warranti:1,washalfop:48,wasn:42,wasop:[10,17,48],wasoptest:10,watch:[39,46],web:[2,6,24,35,46],webpag:2,websit:30,week:42,weekdai:42,welcom:28,well:[1,24,28,29,30,31,32,35,41,42,44,47],were:[1,16,17,30,33,34,35,37,41,42,47],west:35,wget:30,what:[0,1,2,5,6,10,15,17,21,25,28,29,30,35,38,39,41,42],whatev:[1,3,28,35,36,42,43],when:[3,4,6,7,9,10,12,15,16,17,21,22,27,28,29,30,32,33,35,37,39,41,42,44,46,47],whenev:[21,27,32,34,42,44],where:[4,6,10,14,15,18,21,27,28,29,30,31,32,35,36,41,42,44,46],wherea:42,wherev:37,whether:[35,37,42],whew:28,which:[3,5,6,10,12,14,15,16,21,22,27,28,29,30,32,33,34,35,37,39,41,42,43,44,45,46,48],whichev:33,whisper:[24,46],whitespac:42,who:[10,15,17,21,28,30,32,35,39,42,48],whoi:[29,35],whole:27,whose:[33,42],whox:[36,42],why:[28,30,42],wide:[39,44],width:43,wild:42,wildcard:[10,28,29,42,46],window:[2,29,37],wise:[4,35],wish:[3,5,7,16,17,25,27,30,33,34,35,42,46],within:[6,15,27,30,31,33,35,38,42],without:[0,2,4,5,6,9,10,13,19,27,28,29,30,31,34,35,36,38,41,42,44],wizard:31,won:[6,10,22,27,28,30,33,34,35,42,44,46],woobi:[2,3,6,27],word:[15,17,29,30,42,46,47],work:[3,5,6,10,13,15,19,20,22,27,28,29,30,33,34,35,37,38,40,41,42,44,45,46],workaround:[24,32],world:[0,2,4,31,35],worri:24,worth:3,would:[4,5,13,28,29,30,31,32,34,35,42,43,44,46,47],wouldn:35,write:[1,2,6,7,26,30,35,41,42,47],written:[0,27,30,42,47],wrote:28,wspm:46,wspr:46,wth:[],www:[2,4,6,20],x509:[29,35,44],xfer:[23,48],xtra:42,xvf:30,xxd:29,year:[0,4,30,35,42],yes:[28,31,42],yesterdai:35,yet:[4,21,30,35,42],yoru:29,you:[0,1,3,4,5,6,7,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,39,40,41,42,43,44,45,46,47,48],you_want_to_export:27,your:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,34,35,36,37,39,40,41,42,44,47],yourbot:45,yourbranchnam:40,yourconfig:3,youreggdrop:29,youreggdropconfignameher:29,yourself:[7,29,30,40,41,44],yourusernam:40,yyyymmdd:35,zero:42,zip:30,zomg:[],zxvf:30},titles:["About Eggdrop","Boring legal stuff","Eggdrop, an open source IRC bot","Installing Eggdrop","README","Upgrading Eggdrop","Modules included with Eggdrop","Eggdrop Module Information","Assoc Module","Blowfish Module","Channels Module","Compress Module","Console Module","CTCP Module","DNS Module","Filesys Module","Ident Module","IRC Module","Notes Module","PBKDF2 Module","Seen Module","Server Module","Share Module","Transfer Module","Twitch Module","Uptime Module","Woobie Module","Writing an Eggdrop Module","Writing an Eggdrop Script","Common First Steps","Setting Up Eggdrop","Enabling TLS Security on Eggdrop","Account tracking in Eggdrop","Bans, Invites, and Exempts","Botnet Sharing and Linking","Eggdrop Core Settings","Eggdrop Features","IPv6 support","IRCv3 support","The Party Line","Patching Eggdrop","Encryption/Hashing","Eggdrop Tcl Commands","Textfile Substitutions","TLS support","Advanced Tips","Eggdrop Twitch Tcl Commands","Twitch","Users and Flags"],titleterms:{"default":45,"function":[27,47],"int":42,"new":42,"return":42,"short":30,"static":7,"super":30,Adding:34,DNS:14,TLS:[31,44],The:[30,39],Using:[32,34],about:[0,37,38,44],account2nick:42,account:[32,42],accounttrack:42,add:[29,42],addbot:42,addchanrec:42,addit:[27,31],address:42,addus:42,advanc:[35,45],api:24,arg1:42,arg2:42,arg:[42,46],argn:42,assign:29,assoc:[8,42],authent:[29,44],automat:29,background:41,backup:42,ban:[33,42],banlist:42,banmask:42,base64:42,basic:35,best:32,bind:[42,46],block:42,blowfish:9,boot:42,bore:1,bot:[2,15,34,42],botattr:42,botflag:34,botishalfop:42,botisop:42,botisvoic:42,botlist:42,botnam:42,botnet:[5,31,34,35,44],botnick:42,botonchan:42,botport:42,bottre:34,callev:42,can:[2,7],cancel:15,cap:[38,42],capabl:[32,38],certif:44,chan:[42,46],chanban:42,chandname2nam:42,chanexempt:42,chanflag:42,chang:[5,42],chaninvit:42,chanlist:42,channame2dnam:42,channel:[10,15,29,42,46],chansettyp:42,charact:42,chat4:37,chat6:37,chat:37,chattr:42,check:32,chhandl:42,clear:15,clearqueu:42,cmd:46,command:[4,5,24,42,45,46],comment:42,common:29,commun:31,compil:7,compress:[11,42],compressfil:42,config:[5,15,30,42,45,47],configur:[29,30,31,41],configurearg:42,connect:[31,42],consol:[12,35,42],control:42,core:35,count:42,countus:42,creator:42,crontab:4,ctcp:[13,37],ctime:42,cygwin:3,dcc:[35,42,44],dccbroadcast:42,dccdumpfil:42,dcclist:42,dccputchan:42,dccsend:42,dccsimul:42,dccuse:42,decrypt:42,delchanrec:42,delhost:42,deludef:42,delus:42,desc:[15,42],descript:15,dest:15,destin:42,determin:32,develop:4,die:42,dir:[15,42],directori:[15,35,42],disclaim:47,dname:42,dnslookup:42,docker:4,document:[4,5],download:30,dst:15,dumpfil:42,durat:42,dynam:7,echo:42,edit:[30,47],effort:32,eggdrop:[0,2,3,4,5,6,7,27,28,29,30,31,32,35,36,40,42,46],enabl:[31,32,41,42],encpass:42,encrypt:[41,42],entri:42,erasenot:42,event:42,exampl:34,execut:35,exempt:[33,42],exemptlist:42,exemptmask:42,extend:32,extra:42,featur:36,file:[5,15,30,31,35,42,45,47],filemask:15,filenam:[15,42],filepath:15,fileresend:42,filesend:42,filesi:[15,42],filestat:15,find:2,findus:42,first:29,flag:[15,29,34,42,46,48],flushmod:42,formatstr:42,from:42,ftp:4,gener:31,get:[2,4,15,30,42],getaccount:42,getchan:42,getchanhost:42,getchanidl:42,getchaninfo:42,getchanjoin:42,getchanmod:42,getdccawai:42,getdccidl:42,getdesc:42,getdir:42,getfil:42,getfileq:42,getfilesendtim:42,getflag:42,getlink:42,getown:42,getpwd:42,getudef:42,getus:42,git:4,github:40,global:42,hand2idx:42,hand2nick:42,handl:42,handlen:42,handonchan:42,haschanrec:42,hash:41,help:[2,4],helpfil:42,hide:15,histori:30,host:[29,42],hostmask:42,hostnam:42,how:[2,4,5,7],hybrid:41,ident:16,idx2hand:42,idx:42,ignorelist:42,includ:6,info:42,inform:[7,31],instal:[2,3,7,30,37,44],interfac:41,invit:[33,42],invitelist:42,invitemask:42,ipv6:37,irc:[2,17,31,44,47],ircnick:42,ircv3:38,isawai:42,isban:42,isbansticki:42,isbotnick:42,ischanban:42,ischanexempt:42,ischaninvit:42,ischanjup:42,iscompress:42,isdynam:42,isexempt:42,isexemptsticki:42,ishalfop:42,isidentifi:42,isignor:42,isinvit:42,isinvitesticki:42,isircbot:42,isjup:42,islink:42,ismod:46,isop:42,ispermban:42,ispermexempt:42,isperminvit:42,isset:42,istl:42,isupport:42,isvip:46,isvoic:42,join:[29,32],jump:42,keep:45,kei:[31,42,44],keyword:42,killassoc:42,killban:42,killchanban:42,killchanexempt:42,killchaninvit:42,killdcc:42,killexempt:42,killignor:42,killinvit:42,killtim:42,killutim:42,languag:42,lastbind:42,legal:1,level:42,lifetim:42,limit:[24,42,47],line:[4,39],link:[34,42],list:42,listen:[31,42],listnot:42,loadchannel:42,loadhelp:42,loadmodul:[7,42],localfil:15,locat:30,log:[29,35,45],logfil:42,make:34,manipul:42,mask:42,maskhost:42,masktyp:42,match:42,matchaddr:42,matchattr:42,matchban:42,matchcidr:42,matchexempt:42,matchinvit:42,matchstr:42,md5:42,messag:42,minut:42,miscellan:42,mkdir:[15,42],mode:42,modifi:45,modul:[3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,35,42],modular:45,module_clos:27,module_expmem:27,module_report:27,module_start:27,module_t:27,monitor:42,more:2,msg:42,must:5,myip:42,name:42,need:7,newban:42,newchanban:42,newchanexempt:42,newchaninvit:42,newexempt:42,newignor:42,newinvit:42,newnam:42,nick2hand:42,nick:[42,46],nicknam:[15,42],nickserv:29,note:[18,42],notic:4,notifi:32,numberlist:42,numvers:42,obtain:4,old:42,oldnam:42,onchan:42,onchansplit:42,onelin:42,onlin:42,open:2,optim:15,option:42,output:42,own:[],parti:39,partylin:[15,24,29],pass:42,passwdok:42,password:42,patch:40,path:35,pattern:42,pbkdf2:19,pend:15,permiss:29,port:42,pre:[2,4,31],prefix:42,prepar:31,prerequisit:30,proc:42,procedur:42,protect:31,pushmod:42,putallbot:42,putbot:42,putcmdlog:42,putdcc:42,puthelp:42,putkick:42,putlog:42,putloglev:42,putnow:42,putquick:42,putserv:42,putxferlog:42,pwd:15,queue:42,queuesiz:42,quick:[3,4],quit:15,rand:42,raw:42,read:5,readm:4,reason:42,record:[34,42],refreshchan:42,regist:47,rehash:42,reload:42,reloadhelp:42,remov:42,renam:45,renudef:42,req:42,requir:[3,27,32,42],requisit:[2,4,31],resetban:42,resetchan:42,resetchanidl:42,resetchanjoin:42,resetconsol:42,resetexempt:42,resetinvit:42,restart:[29,42],rfcequal:42,rmdir:[15,42],roomstat:46,sasl:29,save:42,savechannel:42,script:[5,28,32,35,44],second:42,secur:[31,44],seen:20,self:45,sendnot:42,server:[21,31,32,42],serveraddress:42,set:[4,29,30,35,37,42,44],setchan:42,setchaninfo:42,setdccawai:42,setdesc:42,setflag:42,setlink:42,setown:42,setpwd:42,setudef:42,setup:15,setus:42,share:[15,22,34],show:30,snapshot:4,socklist:42,solo:41,some:2,sourc:[2,15,30],src:42,ssl:[35,44],stackabl:42,start:30,starttl:42,startup:[3,4],stat:15,statu:[32,42],step:29,stickban:42,stickexempt:42,stickinvit:42,still:7,storenot:42,str:42,strftime:42,string1:42,string2:42,string:[42,45],strip:42,stripcod:42,stuff:1,submit:40,substitut:43,support:[32,37,38,44],system:4,tag:[32,42],tagmsg:42,target:42,tcl:[5,24,32,41,42,46],tcp:42,telnet:35,term:34,text:42,textfil:43,thing:2,time:42,timer:42,timerid:[],timernam:42,tip:45,tlsstatu:42,topic:42,track:32,traffic:42,transfer:23,twcmd:46,twitch:[24,46,47],twitchmod:46,twitchvip:46,type:[42,46],unam:42,unbind:42,uncompressfil:42,unhid:15,unixtim:42,unlink:42,unloadhelp:42,unloadmodul:42,unshar:15,unstickban:42,unstickexempt:42,unstickinvit:42,upgrad:[4,5],uptim:[25,42],usag:[15,37,38,41,44],use:[],user:[15,29,34,42,48],userlist:42,userport:42,userst:46,utim:42,validchan:42,valididx:42,validus:42,valu:42,variabl:[42,45],version:[30,42],via:[40,42],washalfop:42,wasop:42,web:47,what:[4,7,27,34],where:2,whom:42,whox:32,why:[],window:3,without:7,woobi:26,write:[27,28],you:2,your:45}}) \ No newline at end of file diff --git a/doc/html/tutorials/firstscript.html b/doc/html/tutorials/firstscript.html index cb7f27747..7ddc58f93 100644 --- a/doc/html/tutorials/firstscript.html +++ b/doc/html/tutorials/firstscript.html @@ -6,7 +6,7 @@ - Writing an Eggdrop Script — Eggdrop 1.9.3 documentation + Writing an Eggdrop Script — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

      + href="../index.html">Eggdrop 1.9.4 documentation diff --git a/doc/html/tutorials/firststeps.html b/doc/html/tutorials/firststeps.html index 6f5f4bc73..a176fca34 100644 --- a/doc/html/tutorials/firststeps.html +++ b/doc/html/tutorials/firststeps.html @@ -6,7 +6,7 @@ - Common First Steps — Eggdrop 1.9.3 documentation + Common First Steps — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

      + href="../index.html">Eggdrop 1.9.4 documentation diff --git a/doc/html/tutorials/setup.html b/doc/html/tutorials/setup.html index 399d47c2c..d9c1bd41d 100644 --- a/doc/html/tutorials/setup.html +++ b/doc/html/tutorials/setup.html @@ -6,7 +6,7 @@ - Setting Up Eggdrop — Eggdrop 1.9.3 documentation + Setting Up Eggdrop — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

      + href="../index.html">Eggdrop 1.9.4 documentation diff --git a/doc/html/tutorials/tlssetup.html b/doc/html/tutorials/tlssetup.html index 2ed53b411..13f99eab0 100644 --- a/doc/html/tutorials/tlssetup.html +++ b/doc/html/tutorials/tlssetup.html @@ -6,7 +6,7 @@ - Enabling TLS Security on Eggdrop — Eggdrop 1.9.3 documentation + Enabling TLS Security on Eggdrop — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

      + href="../index.html">Eggdrop 1.9.4 documentation diff --git a/doc/html/using/accounts.html b/doc/html/using/accounts.html index 3ac3b9b4b..635bbd06d 100644 --- a/doc/html/using/accounts.html +++ b/doc/html/using/accounts.html @@ -6,7 +6,7 @@ - Account tracking in Eggdrop — Eggdrop 1.9.3 documentation + Account tracking in Eggdrop — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

      + href="../index.html">Eggdrop 1.9.4 documentation @@ -207,7 +207,7 @@

      Using Accounts with Tcl Scripts © Copyright 2022, Eggheads. - Last updated on Sep 18, 2022. + Last updated on Nov 10, 2022. Created using Sphinx 1.8.5. diff --git a/doc/html/using/bans.html b/doc/html/using/bans.html index e3493c8d3..bccb67da2 100644 --- a/doc/html/using/bans.html +++ b/doc/html/using/bans.html @@ -6,7 +6,7 @@ - Bans, Invites, and Exempts — Eggdrop 1.9.3 documentation + Bans, Invites, and Exempts — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

      + href="../index.html">Eggdrop 1.9.4 documentation diff --git a/doc/html/using/botnet.html b/doc/html/using/botnet.html index 805fb4f0f..9d6abcc86 100644 --- a/doc/html/using/botnet.html +++ b/doc/html/using/botnet.html @@ -6,7 +6,7 @@ - Botnet Sharing and Linking — Eggdrop 1.9.3 documentation + Botnet Sharing and Linking — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

      + href="../index.html">Eggdrop 1.9.4 documentation

      Terms

      The following are some common terms used in this document:

      Botnet
      -
      A botnet consists of one or more bots connected together.
      +
      A botnet consists of two or more bots connected together.
      Link
      Link is the term used to describe a bot connecting to another bot.
      Hub
      @@ -428,7 +429,7 @@

      Making bots share user records © Copyright 2022, Eggheads. - Last updated on Jul 12, 2022. + Last updated on Nov 10, 2022. Created using Sphinx 1.8.5.

      diff --git a/doc/html/using/core.html b/doc/html/using/core.html index 186e4c606..9e00c138e 100644 --- a/doc/html/using/core.html +++ b/doc/html/using/core.html @@ -6,7 +6,7 @@ - Eggdrop Core Settings — Eggdrop 1.9.3 documentation + Eggdrop Core Settings — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

      + href="../index.html">Eggdrop 1.9.4 documentation diff --git a/doc/html/using/features.html b/doc/html/using/features.html index 0186707a8..bd4ac4294 100644 --- a/doc/html/using/features.html +++ b/doc/html/using/features.html @@ -6,7 +6,7 @@ - Eggdrop Features — Eggdrop 1.9.3 documentation + Eggdrop Features — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

      + href="../index.html">Eggdrop 1.9.4 documentation diff --git a/doc/html/using/ipv6.html b/doc/html/using/ipv6.html index a6d6cf720..2722906a9 100644 --- a/doc/html/using/ipv6.html +++ b/doc/html/using/ipv6.html @@ -6,7 +6,7 @@ - IPv6 support — Eggdrop 1.9.3 documentation + IPv6 support — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

      + href="../index.html">Eggdrop 1.9.4 documentation

    • TLS support
    • IRCv3 support
    • +
    • Account tracking in Eggdrop
    • Encryption/Hashing
    • Twitch
    • Advanced Tips
    • @@ -200,7 +201,7 @@

      Settings © Copyright 2022, Eggheads. - Last updated on Jul 12, 2022. + Last updated on Nov 10, 2022. Created using Sphinx 1.8.5. diff --git a/doc/html/using/ircv3.html b/doc/html/using/ircv3.html index 4c17e7f20..aaf08ba28 100644 --- a/doc/html/using/ircv3.html +++ b/doc/html/using/ircv3.html @@ -6,7 +6,7 @@ - IRCv3 support — Eggdrop 1.9.3 documentation + IRCv3 support — Eggdrop 1.9.4 documentation @@ -15,7 +15,7 @@ - + @@ -61,6 +61,7 @@

      Table of Contents

    • Supported CAP capabilities
  • +
  • Account tracking in Eggdrop
  • Encryption/Hashing
  • Twitch
  • Advanced Tips
  • @@ -158,7 +159,7 @@

    Supported CAP capabilities previous | - next diff --git a/doc/html/using/partyline.html b/doc/html/using/partyline.html index 34d6ef5ca..93dc1ec45 100644 --- a/doc/html/using/partyline.html +++ b/doc/html/using/partyline.html @@ -6,7 +6,7 @@ - The Party Line — Eggdrop 1.9.3 documentation + The Party Line — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

    + href="../index.html">Eggdrop 1.9.4 documentation diff --git a/doc/html/using/patch.html b/doc/html/using/patch.html index b5f9098b9..063847d69 100644 --- a/doc/html/using/patch.html +++ b/doc/html/using/patch.html @@ -6,7 +6,7 @@ - Patching Eggdrop — Eggdrop 1.9.3 documentation + Patching Eggdrop — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

    + href="../index.html">Eggdrop 1.9.4 documentation diff --git a/doc/html/using/pbkdf2info.html b/doc/html/using/pbkdf2info.html index 56e29505e..af1b55ee0 100644 --- a/doc/html/using/pbkdf2info.html +++ b/doc/html/using/pbkdf2info.html @@ -6,7 +6,7 @@ - Encryption/Hashing — Eggdrop 1.9.3 documentation + Encryption/Hashing — Eggdrop 1.9.4 documentation @@ -16,7 +16,7 @@ - + - ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Flag MaskAction
    +mChecks if the user has the m global flag
    +mnChecks if the user has the m OR n global flag
    |+mnChecks if the user has the m OR n global flag
    |+mn #fooChecks if the user has the m OR n channel flag for #foo
    &+mnChecks if the user has the m AND n global flag
    &mn #fooChecks if the user has the m AND n channel flag for #foo
    |+o #fooChecks if the user has the o channel flag for #foo
    +o|+n #fooChecks if the user has the o global flag OR the n channel flag -for #foo
    +m&+v #fooChecks if the user has the m global flag AND the v channel flag -for #foo
    -mChecks if the user does not have the m global flag
    |-n #fooChecks if the user does not have the n channel flag for #foo
    +m|-n #fooChecks if the user has the global m flag OR does not have a -channel n flag for #foo
    -n&-m #fooChecks if the user does not have the global n flag AND does -not have the channel m flag for #foo
    ||+bChecks if the user has the bot flag b
    -
    -
    @@ -1198,7 +1137,9 @@

    accounttracking

    getaccount <nickname> [channel]

    -
    Returns: the services account name associated with nickname (if Eggdrop is configured to track account status), and “” if they are not logged in or Eggdrop is not able to determine the account status. WARNING: this account list may not be accurate depending on the server and configuration. This command is only accurate if a server supports (and Eggdrop has enabled) the account-notify and extended-join capabilities, and the server understands WHOX requests (also known as raw 354 responses).
    +

    Returns: the services account name associated with nickname, “*” if the user is not logged into services, or “” if eggdrop does not know the account status of the user.

    +

    NOTE: the three required IRC components for account tracking are: the WHOX feature, the extended-join IRCv3 capability and the account-notify IRCv3 capability. if only some of the three feature are available, eggdrop provides best-effort account tracking. please see doc/ACCOUNTS for additional information.

    +

    nick2hand <nickname> [channel]

    @@ -1406,7 +1347,7 @@

    onchansplit <nick> [channel]

    chanlist <channel> [flags][<&|>chanflags]

    -

    Description: flags are any global flags; the ‘&’ or ‘|’ denotes to look for channel specific flags, where ‘&’ will return users having ALL chanflags and ‘|’ returns users having ANY of the chanflags (See matchattr above for additional examples).

    +

    Description: flags are any global flags; the ‘&’ or ‘|’ denotes to look for channel specific flags, where ‘&’ will return users having ALL chanflags and ‘|’ returns users having ANY of the chanflags (See Flag Masks for additional information).

    Returns: Searching for flags optionally preceded with a ‘+’ will return a list of nicknames that have all the flags listed. Searching for flags preceded with a ‘-‘ will return a list of nicknames that do not have have any of the flags (differently said, ‘-‘ will hide users that have all flags listed). If no flags are given, all of the nicknames on the channel are returned.

    Please note that if you’re executing chanlist after a part or sign bind, the gone user will still be listed, so you can check for wasop, isop, etc.

    Module: irc

    @@ -2390,10 +2331,8 @@

    timer <minutes> <tcl-command> [count [timerName]]

    utimer <seconds> <tcl-command> [count [timerName]]

    -
    Description: executes the given Tcl command after a certain number of seconds have passed. If count is specified, the command will be executed count times with the given interval in between. If you specify a count of 0, the utimer will repeat until it’s removed with killutimer or until the bot is restarted. If timerName is specified, it will become the unique identifier for the timer. If no timer
    -

    Name is specified, Eggdrop will assign a timerName in the format of “timer<integer>”.

    -
    -

    Returns: a timerName

    +

    Description: executes the given Tcl command after a certain number of seconds have passed. If count is specified, the command will be executed count times with the given interval in between. If you specify a count of 0, the utimer will repeat until it’s removed with killutimer or until the bot is restarted. If timerName is specified, it will become the unique identifier for the timer. If timerName is not specified, Eggdrop will assign a timerName in the format of “timer<integer>”.

    +

    Returns: a timerName

    Module: core

    @@ -2915,20 +2854,83 @@

    language

    Binds

    -

    You can use the ‘bind’ command to attach Tcl procedures to certain events. -For example, you can write a Tcl procedure that gets called every time a -user says “danger” on the channel.

    -

    Some bind types are marked as “stackable”. That means that you can bind -multiple commands to the same trigger. Normally, for example, a bind such -as ‘bind msg - stop msg:stop’ (which makes a msg-command “stop” call the -Tcl proc “msg:stop”) will overwrite any previous binding you had for the -msg command “stop”. With stackable bindings, like ‘msgm’ for example, -you can bind the same command to multiple procs. When the bind is triggered, -ALL of the Tcl procs that are bound to it will be called. Raw binds are -triggered before builtin binds, as a builtin bind has the potential to -modify args.

    +

    You can use the ‘bind’ command to attach Tcl procedures to certain events. For example, you can write a Tcl procedure that gets called every time a user says “danger” on the channel. When a bind is triggered, ALL of the Tcl procs that are bound to it will be called. Raw binds are triggered before builtin binds, as a builtin bind has the potential to modify args.

    +
    +

    Stackable binds

    +

    Some bind types are marked as “stackable”. That means that you can bind multiple commands to the same trigger. Normally, for example, a bind such as ‘bind msg - stop msg:stop’ (which makes a msg-command “stop” call the Tcl proc “msg:stop”) will overwrite any previous binding you had for the msg command “stop”. With stackable bindings, like ‘msgm’ for example, you can bind the same command to multiple procs.

    +
    +
    +

    Removing a bind

    To remove a bind, use the ‘unbind’ command. For example, to remove the bind for the “stop” msg command, use ‘unbind msg - stop msg:stop’.

    +
    +
    +

    Flag Masks

    +

    In the Bind Types section (and other commands, such as `matchattr`_), you will see several references to the “flags” argument. The “flags” argument takes a flag mask, which is a value that represents the type of user that is allowed to trigger the procedure associated to that bind. The flags can be any of the standard Eggdrop flags (o, m, v, etc). Additionally, when used by itself, a “-” or “*” can be used to skip processing for a flag type. A flag mask has three sections to it- global, channel, and bot flag sections. Each section is separated by the | or & logical operators ( the | means “OR” and the & means “AND; if nothing proceeds the flag then Eggdrop assumes it to be an OR). Additionally, a ‘+’ and ‘-‘ can be used in front of a flag to check if the user does (+) have it, or does not (-) have it.

    +

    The easiest way to explain how to build a flag mask is by demonstration. A flag mask of “v” by itself means “has a global v flag”. To also check for a channel flag, you would use the flag mask “v|v”. This checks if the user has a global “v” flag, OR a channel “v” flag (again, the | means “OR” and ties the two types of flags together). You could change this mask to be “v&v”, which would check if the user has a global “v” flag AND a channel “v” flag. Lastly, to check if a user ONLY has a channel flag, you would use “*|v” as a mask, which would not check global flags but does check if the user had a channel “v” flag.

    +

    You will commonly see flag masks for global flags written “ov”; this is the same as “|ov” or “*|ov”.

    +

    Some additional examples:

    + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Flag MaskAction
    m, +m, m|*Checks if the user has the m global flag
    +mnChecks if the user has the m OR n global flag
    |+mnChecks if the user has the m OR n channel flag
    |+mn #fooChecks if the user has the m OR n channel flag for #foo
    &+mnChecks if the user has the m AND n channel flag
    &mn #fooChecks if the user has the m AND n channel flag for #foo
    |+o #fooChecks if the user has the o channel flag for #foo
    +o|+n #fooChecks if the user has the o global flag OR the n channel flag +for #foo
    +m&+v #fooChecks if the user has the m global flag AND the v channel flag +for #foo
    -mChecks if the user does not have the m global flag
    |-n #fooChecks if the user does not have the n channel flag for #foo
    +m|-n #fooChecks if the user has the global m flag OR does not have a +channel n flag for #foo
    -n&-m #fooChecks if the user does not have the global n flag AND does +not have the channel m flag for #foo
    ||+bChecks if the user has the bot flag b
    +

    As a side note, Tcl scripts historically have used a ‘-‘ to skip processing of a flag type (Example: -|o). It is unknown where and why this practice started, but as a style tip, Eggdrop developers recommend using a ‘*’ to skip processing, so as not to confuse a single “-” meaning “skip processing” with a preceding “-ov” which means “not these flags”.

    +

    Bind Types

    The following is a list of bind types and how they work. Below each bind type is the format of the bind command, the list of arguments sent to the Tcl proc, and an explanation.

    @@ -3122,10 +3124,10 @@

    Bind Typesnick!ident@host (depending on the keyword); flags are ignored. If the proc returns 1, Eggdrop will not process the line any further (this could cause unexpected behavior in some cases), although RAWT binds are processed before RAW binds (and thus, a RAW bind cannot block a RAWT bind).

    Module: server

      @@ -3464,9 +3466,9 @@

      Bind Typesnick!ident@host (depending on the keyword); flags are ignored. “tag” is a dictionary (flat key/value list) of the message tags with “” for empty values (e.g. “account eggdrop realname LamestBot”). If the proc returns 1, Eggdrop will not process the line any further, to include not being processed by a RAW bind (this could cause unexpected behavior in some cases). As of 1.9.0, it is recommended to use the RAWT bind instead of the RAW bind.

    1. ACCOUNT (stackable)
    2. @@ -3474,7 +3476,8 @@

      Bind Typesnick!user@hostname.com account” where channel is the channel the user was found on when the bind was triggered, the hostmask is the user’s hostmask, and account is the account name the user is logging in to, or “” for logging out. The mask argument can accept wildcards. For the proc, nick is the nickname of the user logging into/out of an account, user is the user@host.com hostmask, hand is the handle of the user (or * if none), and account is the name of the account the user logged in to (or “” if the user logged out of an account).

      +

      Description: this bind will trigger when eggdrop detects a change in the authentication status of a user’s service account. The mask for the bind is in the format “#channel nick!user@hostname.com account” and accepts wildcards. account is either the account name the user is logging in to or “*” if the user is not logged in to an account.

      +

      NOTE: the three required IRC components for account tracking are: the WHOX feature, the extended-join IRCv3 capability and the account-notify IRCv3 capability. if only some of the three feature are available, eggdrop provides best-effort account tracking but this bind could be triggered late or never on account changes. Please see doc/ACCOUNTS for additional information.

      1. ISUPPORT (stackable)
      2. @@ -3637,7 +3640,7 @@

        TCP Connections -

        Match Characters

        +

        Match Characters

        Many of the bindings allow match characters in the arguments. Here are the four special characters:

        @@ -3660,6 +3663,10 @@

        Match Characters

        + +
        \*matches a literal *, but please note that Tcl needs escaping as well, +so a bind would have to use “\*” or {*} for a mask argument
        @@ -3693,7 +3700,7 @@

        Match Characters © Copyright 2022, Eggheads. - Last updated on Jul 12, 2022. + Last updated on Nov 10, 2022. Created using Sphinx 1.8.5. diff --git a/doc/html/using/text-sub.html b/doc/html/using/text-sub.html index f043f9d2f..2eb4ed8f4 100644 --- a/doc/html/using/text-sub.html +++ b/doc/html/using/text-sub.html @@ -6,7 +6,7 @@ - Textfile Substitutions — Eggdrop 1.9.3 documentation + Textfile Substitutions — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

        + href="../index.html">Eggdrop 1.9.4 documentation diff --git a/doc/html/using/tls.html b/doc/html/using/tls.html index dad561e18..09531799b 100644 --- a/doc/html/using/tls.html +++ b/doc/html/using/tls.html @@ -6,7 +6,7 @@ - TLS support — Eggdrop 1.9.3 documentation + TLS support — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

        + href="../index.html">Eggdrop 1.9.4 documentation diff --git a/doc/html/using/tricks.html b/doc/html/using/tricks.html index bb11aa970..a63929472 100644 --- a/doc/html/using/tricks.html +++ b/doc/html/using/tricks.html @@ -6,7 +6,7 @@ - Advanced Tips — Eggdrop 1.9.3 documentation + Advanced Tips — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

        + href="../index.html">Eggdrop 1.9.4 documentation diff --git a/doc/html/using/twitch-tcl-commands.html b/doc/html/using/twitch-tcl-commands.html index 45419792b..c973faeb1 100644 --- a/doc/html/using/twitch-tcl-commands.html +++ b/doc/html/using/twitch-tcl-commands.html @@ -6,7 +6,7 @@ - Eggdrop Twitch Tcl Commands — Eggdrop 1.9.3 documentation + Eggdrop Twitch Tcl Commands — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

        + href="../index.html">Eggdrop 1.9.4 documentation diff --git a/doc/html/using/twitchinfo.html b/doc/html/using/twitchinfo.html index e6fad3dea..76ba167ed 100644 --- a/doc/html/using/twitchinfo.html +++ b/doc/html/using/twitchinfo.html @@ -6,7 +6,7 @@ - Twitch — Eggdrop 1.9.3 documentation + Twitch — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

        + href="../index.html">Eggdrop 1.9.4 documentation diff --git a/doc/html/using/users.html b/doc/html/using/users.html index debe28233..174947f73 100644 --- a/doc/html/using/users.html +++ b/doc/html/using/users.html @@ -6,7 +6,7 @@ - Users and Flags — Eggdrop 1.9.3 documentation + Users and Flags — Eggdrop 1.9.4 documentation @@ -24,7 +24,7 @@

        + href="../index.html">Eggdrop 1.9.4 documentation diff --git a/doc/modules/mod.filesys b/doc/modules/mod.filesys index 34290d2b5..49ea3ee1c 100644 --- a/doc/modules/mod.filesys +++ b/doc/modules/mod.filesys @@ -176,7 +176,7 @@ rm [files] ... Cleans up the current directory's database. If you have a large directory with many files you may want to use this command if you experience slow-downs/delays over time. Normally, the db should clean - up itsself though. + up itself though. .unhide diff --git a/doc/modules/mod.irc b/doc/modules/mod.irc index ace9404cb..cff7c251b 100644 --- a/doc/modules/mod.irc +++ b/doc/modules/mod.irc @@ -94,7 +94,7 @@ There are also some variables you can set in your config file: bind msg - myword *msg:hello Many IRCops find bots by seeing if they reply to 'hello' in a msg. - You can change this to another word by un-commenting thse two lines + You can change this to another word by un-commenting these two lines and changing "myword" to the word wish to use instead of'hello'. It must be a single word. diff --git a/doc/tcl-commands.doc b/doc/tcl-commands.doc index bf4d5db3b..8b73f3b70 100644 --- a/doc/tcl-commands.doc +++ b/doc/tcl-commands.doc @@ -7,7 +7,7 @@ of the normal Tcl built-in commands are still there, of course, but you can also use these to manipulate features of the bot. They are listed according to category. -This list is accurate for Eggdrop v1.9.3. Scripts written for v1.3, +This list is accurate for Eggdrop v1.9.4. Scripts written for v1.3, v1.4, 1.6 and 1.8 series of Eggdrop should probably work with a few minor modifications depending on the script. Scripts which were written for v0.9, v1.0, v1.1 or v1.2 will probably not work without @@ -404,44 +404,8 @@ matchattr [channel] Either | or & can be used as a separator between global, channel, and bot flags, but only one separator can be used per flag section. A '+' is used to check if a user has the subsequent flags, and a '-' is used - to check if a user does NOT have the subsequent flags. - - ----------------------------------------------------------------------- - Flag Mask Action - ----------- ----------------------------------------------------------- - +m + Checks if the user has the m global flag - - +mn Checks if the user has the m OR n global flag - - |+mn Checks if the user has the m OR n global flag - - |+mn #foo Checks if the user has the m OR n channel flag for #foo - - &+mn Checks if the user has the m AND n global flag - - &mn #foo Checks if the user has the m AND n channel flag for #foo - - |+o #foo Checks if the user has the o channel flag for #foo - - +o|+n #foo Checks if the user has the o global flag OR the n channel - flag for #foo - - +m&+v #foo Checks if the user has the m global flag AND the v channel - flag for #foo - - -m Checks if the user does not have the m global flag - - |-n #foo Checks if the user does not have the n channel flag for - #foo - - +m|-n #foo Checks if the user has the global m flag OR does not have a - channel n flag for #foo - - -n&-m #foo Checks if the user does not have the global n flag AND does - not have the channel m flag for #foo - - ||+b Checks if the user has the bot flag b - ----------------------------------------------------------------------- + to check if a user does NOT have the subsequent flags. Please see Flag + Masks for additional information on flag usage. Returns: 1 if the specified user has the flags matching the provided mask; 0 otherwise @@ -1223,14 +1187,15 @@ accounttracking getaccount [channel] - Returns: the services account name associated with nickname (if - Eggdrop is configured to track account status), and "" if they are not - logged in or Eggdrop is not able to determine the account status. - WARNING: this account list may not be accurate depending on the server - and configuration. This command is only accurate if a server supports - (and Eggdrop has enabled) the account-notify and extended-join - capabilities, and the server understands WHOX requests (also known as - raw 354 responses). + Returns: the services account name associated with nickname, "*" if + the user is not logged into services, or "" if eggdrop does not know + the account status of the user. + + NOTE: the three required IRC components for account tracking are: the + WHOX feature, the extended-join IRCv3 capability and the + account-notify IRCv3 capability. if only some of the three feature are + available, eggdrop provides best-effort account tracking. please see + doc/ACCOUNTS for additional information. nick2hand [channel] @@ -1455,7 +1420,7 @@ chanlist [flags][<&|>chanflags] Description: flags are any global flags; the '&' or '|' denotes to look for channel specific flags, where '&' will return users having ALL chanflags and '|' returns users having ANY of the chanflags (See - matchattr above for additional examples). + Flag Masks for additional information). Returns: Searching for flags optionally preceded with a '+' will return a list of nicknames that have all the flags listed. Searching @@ -2447,10 +2412,9 @@ utimer [count [timerName]] executed count times with the given interval in between. If you specify a count of 0, the utimer will repeat until it's removed with killutimer or until the bot is restarted. If timerName is specified, - it will become the unique identifier for the timer. If no timer - -Name is specified, Eggdrop will assign a timerName in the format of -"timer". + it will become the unique identifier for the timer. If timerName is + not specified, Eggdrop will assign a timerName in the format of + "timer". Returns: a timerName @@ -2478,7 +2442,7 @@ utimers Module: core -^^^^^^^^^^^^^^^^^^^ killtimer ^^^^^^^^^^^^^^^^^^^ +killtimer Description: removes the timerName minutely timer from the timer list. @@ -2486,7 +2450,7 @@ utimers Module: core -^^^^^^^^^^^^^^^^^^^^ killutimer ^^^^^^^^^^^^^^^^^^^^ +killutimer Description: removes the timerName secondly timer from the timer list. @@ -2994,21 +2958,98 @@ BINDS You can use the 'bind' command to attach Tcl procedures to certain events. For example, you can write a Tcl procedure that gets called -every time a user says "danger" on the channel. +every time a user says "danger" on the channel. When a bind is +triggered, ALL of the Tcl procs that are bound to it will be called. Raw +binds are triggered before builtin binds, as a builtin bind has the +potential to modify args. + +Stackable binds Some bind types are marked as "stackable". That means that you can bind multiple commands to the same trigger. Normally, for example, a bind such as 'bind msg - stop msg:stop' (which makes a msg-command "stop" call the Tcl proc "msg:stop") will overwrite any previous binding you had for the msg command "stop". With stackable bindings, like 'msgm' for -example, you can bind the same command to multiple procs. When the bind -is triggered, ALL of the Tcl procs that are bound to it will be called. -Raw binds are triggered before builtin binds, as a builtin bind has the -potential to modify args. +example, you can bind the same command to multiple procs. + +Removing a bind To remove a bind, use the 'unbind' command. For example, to remove the bind for the "stop" msg command, use 'unbind msg - stop msg:stop'. +Flag Masks + +In the Bind Types section (and other commands, such as matchattr), you +will see several references to the "flags" argument. The "flags" +argument takes a flag mask, which is a value that represents the type of +user that is allowed to trigger the procedure associated to that bind. +The flags can be any of the standard Eggdrop flags (o, m, v, etc). +Additionally, when used by itself, a "-" or "*" can be used to skip +processing for a flag type. A flag mask has three sections to it- +global, channel, and bot flag sections. Each section is separated by the +| or & logical operators ( the | means "OR" and the & means "AND; if +nothing proceeds the flag then Eggdrop assumes it to be an OR). +Additionally, a '+' and '-' can be used in front of a flag to check if +the user does (+) have it, or does not (-) have it. + +The easiest way to explain how to build a flag mask is by demonstration. +A flag mask of "v" by itself means "has a global v flag". To also check +for a channel flag, you would use the flag mask "v means "OR" and ties +the two types of flags together). You could change this mask to be +"v&v", which would check if the user has a global "v" flag AND a channel +"v" flag. Lastly, to check if a user ONLY has a channel flag, you would +use "*|v" as a mask, which would not check global flags but does check +if the user had a channel "v" flag. + +You will commonly see flag masks for global flags written "ov"; this is +the same as "|ov" or "*|ov". + +Some additional examples: + + ----------------------------------------------------------------------- + Flag Mask Action + ----------- ----------------------------------------------------------- + m, +m, m|* Checks if the user has the m global flag + + +mn Checks if the user has the m OR n global flag + + |+mn Checks if the user has the m OR n channel flag + + |+mn #foo Checks if the user has the m OR n channel flag for #foo + + &+mn Checks if the user has the m AND n channel flag + + &mn #foo Checks if the user has the m AND n channel flag for #foo + + |+o #foo Checks if the user has the o channel flag for #foo + + +o|+n #foo Checks if the user has the o global flag OR the n channel + flag for #foo + + +m&+v #foo Checks if the user has the m global flag AND the v channel + flag for #foo + + -m Checks if the user does not have the m global flag + + |-n #foo Checks if the user does not have the n channel flag for + #foo + + +m|-n #foo Checks if the user has the global m flag OR does not have a + channel n flag for #foo + + -n&-m #foo Checks if the user does not have the global n flag AND does + not have the channel m flag for #foo + + ||+b Checks if the user has the bot flag b + ----------------------------------------------------------------------- + +As a side note, Tcl scripts historically have used a '-' to skip +processing of a flag type (Example: -|o). It is unknown where and why +this practice started, but as a style tip, Eggdrop developers recommend +using a '*' to skip processing, so as not to confuse a single "-" +meaning "skip processing" with a preceding "-ov" which means "not these +flags". + Bind Types The following is a list of bind types and how they work. Below each bind @@ -3295,26 +3336,22 @@ the Tcl proc, and an explanation. (17) RAW (stackable) - bind raw + bind raw procname IMPORTANT: While not necessarily deprecated, this bind has been - supplanted by the RAWT bind as of 1.9.0. You probably want to be using - RAWT, not RAW. - - Description: previous versions of Eggdrop required a special compile - option to enable this binding, but it's now standard. The keyword is - either a numeric, like "368", or a keyword, such as "PRIVMSG". "from" - will be the server name or the source user (depending on the keyword); - flags are ignored. The order of the arguments is identical to the - order that the IRC server sends to the bot. The pre-processing only - splits it apart enough to determine the keyword. If the proc returns - 1, Eggdrop will not process the line any further (this could cause - unexpected behavior in some cases), although RAWT binds are processed - before RAW binds (and thus, a RAW bind cannot block a RAWT bind). The - RAW bind does not support the IRCv3 message-tags capability, please - see RAWT for more information. + supplanted by the RAWT bind, which supports the IRCv3 message-tags + capability, as of 1.9.0. You probably want to be using RAWT, not RAW. + + Description: The mask can contain wildcards and is matched against the + keyword, which is either a numeric, like "368", or a keyword, such as + "PRIVMSG". "from" will be the server name or the source + nick!ident@host (depending on the keyword); flags are ignored. If the + proc returns 1, Eggdrop will not process the line any further (this + could cause unexpected behavior in some cases), although RAWT binds + are processed before RAW binds (and thus, a RAW bind cannot block a + RAWT bind). Module: server @@ -3824,22 +3861,21 @@ the Tcl proc, and an explanation. (52) RAWT (stackable) - bind rawt + bind rawt - procname + procname Description: similar to the RAW bind, but allows an extra field for - the IRCv3 message-tags capability. The keyword is either a numeric, - like "368", or a keyword, such as "PRIVMSG" or "TAGMSG". "from" will - be the server name or the source user (depending on the keyword); - flags are ignored. "tag" will be the contents, if any, of the entire - tag message prefixed to the server message in a dict format, such as - "msgid 890157217279768 aaa bbb". The order of the arguments is - identical to the order that the IRC server sends to the bot. If the - proc returns 1, Eggdrop will not process the line any further, to - include not being processed by a RAW bind (this could cause unexpected - behavior in some cases). As of 1.9.0, it is recommended to use the - RAWT bind instead of the RAW bind. + the IRCv3 message-tags capability. The mask can contain wildcards and + is matched against the keyword which is either a numeric, like "368", + or a keyword, such as "PRIVMSG" or "TAGMSG". "from" will be the server + name or the source nick!ident@host (depending on the keyword); flags + are ignored. "tag" is a dictionary (flat key/value list) of the + message tags with "" for empty values (e.g. "account eggdrop realname + LamestBot"). If the proc returns 1, Eggdrop will not process the line + any further, to include not being processed by a RAW bind (this could + cause unexpected behavior in some cases). As of 1.9.0, it is + recommended to use the RAWT bind instead of the RAW bind. (53) ACCOUNT (stackable) @@ -3847,19 +3883,18 @@ the Tcl proc, and an explanation. procname - Description: triggered when Eggdrop detects a change in a service - account status. The change could be initiated by receiving an IRCv3 - ACCOUNT message, receiving IRCv3 extended-join information when a user - on an existing channel joins a new channel, or detecting an IRCv3 - account-tag in a PRIVMSG. The mask for the bind is in the format - "#channel nick!user@hostname.com account" where channel is the channel - the user was found on when the bind was triggered, the hostmask is the - user's hostmask, and account is the account name the user is logging - in to, or "" for logging out. The mask argument can accept wildcards. - For the proc, nick is the nickname of the user logging into/out of an - account, user is the user@host.com hostmask, hand is the handle of the - user (or * if none), and account is the name of the account the user - logged in to (or "" if the user logged out of an account). + Description: this bind will trigger when eggdrop detects a change in + the authentication status of a user's service account. The mask for + the bind is in the format "#channel nick!user@hostname.com account" + and accepts wildcards. account is either the account name the user is + logging in to or "*" if the user is not logged in to an account. + + NOTE: the three required IRC components for account tracking are: the + WHOX feature, the extended-join IRCv3 capability and the + account-notify IRCv3 capability. if only some of the three feature are + available, eggdrop provides best-effort account tracking but this bind + could be triggered late or never on account changes. Please see + doc/ACCOUNTS for additional information. (54) ISUPPORT (stackable) @@ -4090,6 +4125,9 @@ the four special characters: ~ matches 1 or more space characters (can be used for whitespace between words) (This char only works in binds, not in regular matching) + + \* matches a literal *, but please note that Tcl needs escaping as + well, so a bind would have to use "\*" or {*} for a mask argument ----- ----------------------------------------------------------------- Copyright (C) 1999 - 2022 Eggheads Development Team From 272983c2c34dd25673ab8dcf1be9ce897f217c85 Mon Sep 17 00:00:00 2001 From: Geo Date: Thu, 10 Nov 2022 17:27:05 -0500 Subject: [PATCH 131/201] Run autoconf --- configure | 20 ++++++++++---------- src/mod/compress.mod/configure | 20 ++++++++++---------- src/mod/dns.mod/configure | 20 ++++++++++---------- 3 files changed, 30 insertions(+), 30 deletions(-) diff --git a/configure b/configure index ecfb818de..b7e1fb352 100755 --- a/configure +++ b/configure @@ -1,7 +1,7 @@ #! /bin/sh -# From configure.ac bc41b3ea. +# From configure.ac 13ab0170. # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for Eggdrop 1.9.3. +# Generated by GNU Autoconf 2.69 for Eggdrop 1.9.4. # # Report bugs to . # @@ -583,8 +583,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='Eggdrop' PACKAGE_TARNAME='eggdrop' -PACKAGE_VERSION='1.9.3' -PACKAGE_STRING='Eggdrop 1.9.3' +PACKAGE_VERSION='1.9.4' +PACKAGE_STRING='Eggdrop 1.9.4' PACKAGE_BUGREPORT='bugs@eggheads.org' PACKAGE_URL='' @@ -1334,7 +1334,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures Eggdrop 1.9.3 to adapt to many kinds of systems. +\`configure' configures Eggdrop 1.9.4 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1401,7 +1401,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of Eggdrop 1.9.3:";; + short | recursive ) echo "Configuration of Eggdrop 1.9.4:";; esac cat <<\_ACEOF @@ -1511,7 +1511,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -Eggdrop configure 1.9.3 +Eggdrop configure 1.9.4 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2222,7 +2222,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by Eggdrop $as_me 1.9.3, which was +It was created by Eggdrop $as_me 1.9.4, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -10513,7 +10513,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by Eggdrop $as_me 1.9.3, which was +This file was extended by Eggdrop $as_me 1.9.4, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -10579,7 +10579,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -Eggdrop config.status 1.9.3 +Eggdrop config.status 1.9.4 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/src/mod/compress.mod/configure b/src/mod/compress.mod/configure index 356916e6d..29f9f2adc 100755 --- a/src/mod/compress.mod/configure +++ b/src/mod/compress.mod/configure @@ -1,7 +1,7 @@ #! /bin/sh -# From configure.ac bc41b3ea. +# From configure.ac 13ab0170. # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for Eggdrop Compress Module 1.9.3. +# Generated by GNU Autoconf 2.69 for Eggdrop Compress Module 1.9.4. # # Report bugs to . # @@ -583,8 +583,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='Eggdrop Compress Module' PACKAGE_TARNAME='eggdrop-compress-module' -PACKAGE_VERSION='1.9.3' -PACKAGE_STRING='Eggdrop Compress Module 1.9.3' +PACKAGE_VERSION='1.9.4' +PACKAGE_STRING='Eggdrop Compress Module 1.9.4' PACKAGE_BUGREPORT='bugs@eggheads.org' PACKAGE_URL='' @@ -1240,7 +1240,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures Eggdrop Compress Module 1.9.3 to adapt to many kinds of systems. +\`configure' configures Eggdrop Compress Module 1.9.4 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1303,7 +1303,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of Eggdrop Compress Module 1.9.3:";; + short | recursive ) echo "Configuration of Eggdrop Compress Module 1.9.4:";; esac cat <<\_ACEOF @@ -1383,7 +1383,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -Eggdrop Compress Module configure 1.9.3 +Eggdrop Compress Module configure 1.9.4 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1687,7 +1687,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by Eggdrop Compress Module $as_me 1.9.3, which was +It was created by Eggdrop Compress Module $as_me 1.9.4, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3687,7 +3687,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by Eggdrop Compress Module $as_me 1.9.3, which was +This file was extended by Eggdrop Compress Module $as_me 1.9.4, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -3740,7 +3740,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -Eggdrop Compress Module config.status 1.9.3 +Eggdrop Compress Module config.status 1.9.4 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/src/mod/dns.mod/configure b/src/mod/dns.mod/configure index c14fa7a18..00072f073 100755 --- a/src/mod/dns.mod/configure +++ b/src/mod/dns.mod/configure @@ -1,7 +1,7 @@ #! /bin/sh -# From configure.ac bc41b3ea. +# From configure.ac 13ab0170. # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for Eggdrop DNS Module 1.9.3. +# Generated by GNU Autoconf 2.69 for Eggdrop DNS Module 1.9.4. # # Report bugs to . # @@ -582,8 +582,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='Eggdrop DNS Module' PACKAGE_TARNAME='eggdrop-dns-module' -PACKAGE_VERSION='1.9.3' -PACKAGE_STRING='Eggdrop DNS Module 1.9.3' +PACKAGE_VERSION='1.9.4' +PACKAGE_STRING='Eggdrop DNS Module 1.9.4' PACKAGE_BUGREPORT='bugs@eggheads.org' PACKAGE_URL='' @@ -1200,7 +1200,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures Eggdrop DNS Module 1.9.3 to adapt to many kinds of systems. +\`configure' configures Eggdrop DNS Module 1.9.4 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1263,7 +1263,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of Eggdrop DNS Module 1.9.3:";; + short | recursive ) echo "Configuration of Eggdrop DNS Module 1.9.4:";; esac cat <<\_ACEOF @@ -1342,7 +1342,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -Eggdrop DNS Module configure 1.9.3 +Eggdrop DNS Module configure 1.9.4 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1476,7 +1476,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by Eggdrop DNS Module $as_me 1.9.3, which was +It was created by Eggdrop DNS Module $as_me 1.9.4, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3119,7 +3119,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by Eggdrop DNS Module $as_me 1.9.3, which was +This file was extended by Eggdrop DNS Module $as_me 1.9.4, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -3172,7 +3172,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -Eggdrop DNS Module config.status 1.9.3 +Eggdrop DNS Module config.status 1.9.4 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" From 2c493b66ba7dec041dbb3f85a2da5d32e4499245 Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sun, 11 Dec 2022 20:48:59 +0000 Subject: [PATCH 132/201] Fix typo --- doc/sphinx_source/tutorials/tlssetup.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/sphinx_source/tutorials/tlssetup.rst b/doc/sphinx_source/tutorials/tlssetup.rst index 23e2ea636..6cc8fff3e 100644 --- a/doc/sphinx_source/tutorials/tlssetup.rst +++ b/doc/sphinx_source/tutorials/tlssetup.rst @@ -39,7 +39,7 @@ Eggdrop has the ability to protect botnet (direct bot to bot) communications wit Configuration File Preparation - Generating Keys ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -If an Eggdrop is going to listen/accept connections on a TLS port (more on that in a moment), it must have a public/private certificate pair generated and configured. For most users, a self-signed certificate is sufficient for encryption (a certificate signed by a certificate authority would be more secure, but obtaining one is outside the scope of this tutorial. However, the implementatino of a signed keypair is no different than a self-signed pair). To generate a self-signed key pair, enter the Eggdrop source directory (the directory you first compiled Eggdrop from, usually named eggdrop-X.Y.Z) and type:: +If an Eggdrop is going to listen/accept connections on a TLS port (more on that in a moment), it must have a public/private certificate pair generated and configured. For most users, a self-signed certificate is sufficient for encryption (a certificate signed by a certificate authority would be more secure, but obtaining one is outside the scope of this tutorial. However, the implementation of a signed keypair is no different than a self-signed pair). To generate a self-signed key pair, enter the Eggdrop source directory (the directory you first compiled Eggdrop from, usually named eggdrop-X.Y.Z) and type:: make sslcert From b2c9dae3f767c3942eda8b80c30e22ba6e9459fb Mon Sep 17 00:00:00 2001 From: Geo Date: Sun, 11 Dec 2022 21:26:40 -0500 Subject: [PATCH 133/201] Add systemd option to autobotchk Patch by: @PeGaSuS-Coder , Geo Adds a -systemd option to the autobotchk script. Will be considered Beta for now, and based on user feedback go stable in the next release. --- INSTALL | 8 +- README | 30 +++++--- doc/html/tutorials/firststeps.html | 23 +++++- doc/sphinx_source/install/install.rst | 6 +- doc/sphinx_source/install/readme.rst | 17 +++-- doc/sphinx_source/tutorials/firststeps.rst | 42 +++++++++- scripts/autobotchk | 89 ++++++++++++++++++---- 7 files changed, 171 insertions(+), 44 deletions(-) diff --git a/INSTALL b/INSTALL index 064b9ea37..1b355fd85 100644 --- a/INSTALL +++ b/INSTALL @@ -115,8 +115,12 @@ Eggdrop into from the previous step] automatically restart if the machine goes down or (heaven forbid) the bot should crash. Eggdrop includes a helper script - to generate a proper crontab script and entry. You can run this - script by typing: + to auto-generate either a systemd or crontab entry. To add a + systemd job, run: + + ./scripts/autobotchk [yourconfig.conf] -systemd + + or to add a crontab job, run: ./scripts/autobotchk [yourconfig.conf] diff --git a/README b/README index 456773650..9e5bef168 100644 --- a/README +++ b/README @@ -156,28 +156,36 @@ COMMAND LINE Most people never use any of the options except -m and you usually only need to use that once. -SETTING UP A CRONTAB +AUTO-STARTING EGGDROP Systems go down from time to time, taking your Eggdrop along with it. You may not be not around to restart it manually, so you can instead use -your host's crontab system to automatically restart Eggdrop should it -quit for any reason. Eggdrop comes with an autobotchk shell script -creates that both checks if your Eggdrop is still running, and a crontab -entry to run the botchk script every 10 minutes. +features of the operating system to automatically restart Eggdrop should +it quit for any reason. Eggdrop comes with an autobotchk shell script +that can create either a systemd or crontab entry. The systemd option +will monitor your Eggdrop and a) start it when the machine boots and b) +restart the Eggdrop if it crashes for any reason. The (older) crontab +option will check (by default) every 10 minutes to see if your Eggdrop +is still running, and attempt to restart it if it is not. - Using autobotchk is probably the fastest way of creating your botchk - and adding a crontab entry. From the install directory, simply run: + To auto-generate a systemd job, from the Eggdrop install directory, + simply run: + + ./scripts/autobotchk -systemd + + To auto-geneerate a script to check Eggdrop's status and run it via a + crontab entry, simply run: ./scripts/autobotchk This will crontab your bot using the default setup. If you want a list - of autobotchk options, type './autobotchk'. An example with options - would be: + of autobotchk options, type './autobotchk'. A crontab example with + options would be: ./scripts/autobotchk -noemail -5 - This would setup crontab to run the botchk every 5 minutes and also to - not send you email saying that it restarted your bot. + This would setup crontab to run the botchk every 5 minutes and not + send you an email saying that it restarted your bot. DOCUMENTATION diff --git a/doc/html/tutorials/firststeps.html b/doc/html/tutorials/firststeps.html index a176fca34..4a8c80084 100644 --- a/doc/html/tutorials/firststeps.html +++ b/doc/html/tutorials/firststeps.html @@ -180,13 +180,15 @@

        Configure Channel Settings

        Automatically restarting an Eggdrop

        -

        A common question asked by users is, how can I configure Eggdrop to automatically restart should it die, such as after a reboot? To do that, we use the system’s crontab daemon to run a script (called botchk) every ten minutes that checks if the eggdrop is running. If the eggdrop is not running, the script will restart the bot, with an optional email sent to the user informing them of the action. To make this process as simple as possible, we have included a script that can automatically configure your crontab and botchk scripts for you. To set up your crontab/botchk combo:

        +

        A common question asked by users is, how can I configure Eggdrop to automatically restart should it die, such as after a reboot? Historically, Eggdrop relied on the host’s crontab system to run a script (called botchk) every ten minutes to see if the eggdrop is running. If the eggdrop is not running, the script will restart the bot, with an optional email sent to the user informing them of the action. Newer systems come with systemd, which can provide better real-time monitoring of processes such as Eggdrop. You probably want to use systemd if your system has it.

        +
        +

        Crontab Method (Old)

        1. Enter the directory you installed your Eggdrop to. Most commonly, this is ~/eggdrop (also known as /home/<username>/eggdrop).

        2. Just humor us- run ./scripts/autobotchk without any arguments and read the options available to you. They’re listed there for a reason!

        3. -
        4. If you don’t want to customize anything via the options listed in #2, you can start the script simply by running:

          +
        5. If you don’t want to customize anything via the options listed in #2, you can install a crontab job to start Eggdrop simply by running:

          ./scripts/autobotchk yourEggdropConfigNameHere.conf
           
          @@ -203,6 +205,21 @@

          Automatically restarting an Eggdropcrontab -e to open the crontab file in your system’s default editor and remove the crontab line.

        +
        +

        Systemd Method (Newer Systems)

        +
          +
        1. Enter the directory you installed your Eggdrop to. Most commonly, this is ~/eggdrop (also known as /home/<username>/eggdrop).

          +
        2. +
        3. Install the systemd job for Eggdrop simply by running:

          +
          ./scripts/autobotchk yourEggdropConfigNameHere.conf -systemd
          +
          +
          +
        4. +
        5. Note the output at the end of the script informing you of the command you can use to start/stop the Eggdrop in thee future

          +
        6. +
        +
        +

        Authenticating with NickServ

        Many IRC features require you to authenticate with NickServ to use them. You can do this from your config file by searching for the line:

        @@ -273,7 +290,7 @@

        Setting up SASL authentication © Copyright 2022, Eggheads. - Last updated on Nov 10, 2022. + Last updated on Dec 03, 2022. Created using Sphinx 1.8.5.

        diff --git a/doc/sphinx_source/install/install.rst b/doc/sphinx_source/install/install.rst index ece05c0e4..2a1679844 100644 --- a/doc/sphinx_source/install/install.rst +++ b/doc/sphinx_source/install/install.rst @@ -96,7 +96,11 @@ Eggdrop uses the GNU autoconfigure scripts to make things easier. 9. It's advisable to run your bot via crontab, so that it will automatically restart if the machine goes down or (heaven forbid) - the bot should crash. Eggdrop includes a helper script to generate a proper crontab script and entry. You can run this script by typing:: + the bot should crash. Eggdrop includes a helper script to auto-generate either a systemd or crontab entry. To add a systemd job, run:: + + ./scripts/autobotchk [yourconfig.conf] -systemd + + or to add a crontab job, run:: ./scripts/autobotchk [yourconfig.conf] diff --git a/doc/sphinx_source/install/readme.rst b/doc/sphinx_source/install/readme.rst index 385c76265..0a1593dc6 100644 --- a/doc/sphinx_source/install/readme.rst +++ b/doc/sphinx_source/install/readme.rst @@ -142,21 +142,24 @@ Command Line Most people never use any of the options except -m and you usually only need to use that once. -Setting up a Crontab --------------------- +Auto-starting Eggdrop +--------------------- -Systems go down from time to time, taking your Eggdrop along with it. You may not be not around to restart it manually, so you can instead use your host's crontab system to automatically restart Eggdrop should it quit for any reason. Eggdrop comes with an autobotchk shell script creates that both checks if your Eggdrop is still running, and a crontab entry to run the botchk script every 10 minutes. +Systems go down from time to time, taking your Eggdrop along with it. You may not be not around to restart it manually, so you can instead use features of the operating system to automatically restart Eggdrop should it quit for any reason. Eggdrop comes with an autobotchk shell script that can create either a systemd or crontab entry. The systemd option will monitor your Eggdrop and a) start it when the machine boots and b) restart the Eggdrop if it crashes for any reason. The (older) crontab option will check (by default) every 10 minutes to see if your Eggdrop is still running, and attempt to restart it if it is not. - Using autobotchk is probably the fastest way of creating your botchk and adding a crontab entry. From the install directory, simply run:: + To auto-generate a systemd job, from the Eggdrop install directory, simply run:: - ./scripts/autobotchk + ./scripts/autobotchk -systemd + To auto-geneerate a script to check Eggdrop's status and run it via a crontab entry, simply run:: + + ./scripts/autobotchk - This will crontab your bot using the default setup. If you want a list of autobotchk options, type './autobotchk'. An example with options would be:: + This will crontab your bot using the default setup. If you want a list of autobotchk options, type './autobotchk'. A crontab example with options would be:: ./scripts/autobotchk -noemail -5 - This would setup crontab to run the botchk every 5 minutes and also to not send you email saying that it restarted your bot. + This would setup crontab to run the botchk every 5 minutes and not send you an email saying that it restarted your bot. Documentation ------------- diff --git a/doc/sphinx_source/tutorials/firststeps.rst b/doc/sphinx_source/tutorials/firststeps.rst index c3c1c9043..71330a631 100644 --- a/doc/sphinx_source/tutorials/firststeps.rst +++ b/doc/sphinx_source/tutorials/firststeps.rst @@ -80,15 +80,18 @@ which will enforce the s, n, and t flags on a channel. Automatically restarting an Eggdrop ----------------------------------- -A common question asked by users is, how can I configure Eggdrop to automatically restart should it die, such as after a reboot? To do that, we use the system's crontab daemon to run a script (called botchk) every ten minutes that checks if the eggdrop is running. If the eggdrop is not running, the script will restart the bot, with an optional email sent to the user informing them of the action. To make this process as simple as possible, we have included a script that can automatically configure your crontab and botchk scripts for you. To set up your crontab/botchk combo: +A common question asked by users is, how can I configure Eggdrop to automatically restart should it die, such as after a reboot? Historically, Eggdrop relied on the host's crontab system to run a script (called botchk) every ten minutes to see if the eggdrop is running. If the eggdrop is not running, the script will restart the bot, with an optional email sent to the user informing them of the action. Newer systems come with systemd, which can provide better real-time monitoring of processes such as Eggdrop. You probably want to use systemd if your system has it. + +Crontab Method (Old) +^^^^^^^^^^^^^^^^^^^^ 1. Enter the directory you installed your Eggdrop to. Most commonly, this is ~/eggdrop (also known as /home//eggdrop). -2. Just humor us- run ``./scripts/autobotchk`` without any arguments and read the options available to you. They're listed there for a reason! +2. Just humor us- run ``./scripts/autobotchk`` without any arguments and read the options available to you. They're listed there for a reason! -3. If you don't want to customize anything via the options listed in #2, you can start the script simply by running:: +3. If you don't want to customize anything via the options listed in #2, you can install a crontab job to start Eggdrop simply by running:: - ./scripts/autobotchk yourEggdropConfigNameHere.conf + ./scripts/autobotchk yourEggdropConfigNameHere.conf 4. Review the output of the script, and verify your new crontab entry by typing:: @@ -100,6 +103,37 @@ By default, it should create an entry that looks similar to:: This will run the generated botchk script every ten minutes and restart your Eggdrop if it is not running during the check. Also note that if you run autobotchk from the scripts directory, you'll have to manually specify your config file location with the -dir option. To remove a crontab entry, use ``crontab -e`` to open the crontab file in your system's default editor and remove the crontab line. +Systemd Method (Newer Systems) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +1. Enter the directory you installed your Eggdrop to. Most commonly, this is ~/eggdrop (also known as /home//eggdrop). + +2. Install the systemd job for Eggdrop simply by running:: + + ./scripts/autobotchk yourEggdropConfigNameHere.conf -systemd + +3. Note the output at the end of the script informing you of the command you can use to start/stop the Eggdrop in thee future. For example, to manually start the Eggdrop, use:: + + systemctl --user start .service + +To stop Eggdrop, use:: + + systemctl --user stop .service + +To rehash (not reload) Eggdrop, use:: + + systemctl --user reload .service + +(Yes, we acknowledge the confusion that the systemd reload command will execute the Eggdrop '.rehash' command, not the '.reload' command. Unfortunately, systemd did not consult us when choosing its commands!) + +To prevent Eggdrop from automatically running after a system start, use:: + + systemctl --user disable .service + +To re-enable Eggdrop automatically starting after a system start, use:: + + systemctl --user enable .service + Authenticating with NickServ ---------------------------- diff --git a/scripts/autobotchk b/scripts/autobotchk index d517717f9..801b80dc5 100755 --- a/scripts/autobotchk +++ b/scripts/autobotchk @@ -3,6 +3,8 @@ # Copyright (C) 1999-2003 Jeff Fisher (guppy@eggheads.org) # Copyright (C) 2004-2022 Eggheads Development Team # +# systemd formating contributed by PeGaSuS +# # 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 2 @@ -89,11 +91,16 @@ exec tclsh$lastver "$0" ${1+"$@"} # with len > handlen, for (botnet-)nicks with \[ \] and for # $(botnet-)nick used in pidfile, userfile or (botnet-)nick # 19Apr2017: Fix running this from a non-eggdrop dir. +# 28Nov2023: Added -systemd option, to (duh) create a systemd job if {$argc == 0} { puts "\nusage: $argv0 \[options\] \[additional configs\]" puts "Options:" puts "--------" + puts " systemd options:" + puts " -systemd (install systemd job instead of cron)" + puts "" + puts " crontab options:" puts " -dir (directory to run autobotchk in)" puts " -noemail (discard crontab e-mails)" puts " -5 (5 minute checks)" @@ -126,7 +133,7 @@ proc newsplit {text {split " "}} { } puts "\nautobotchk 1.11, (C) 1999-2003 Jeff Fisher (guppy@eggheads.org)" -puts "\n (C) 2004-2016 Eggheads Development Team" +puts " (C) 2004-2022 Eggheads Development Team" puts "------------------------------------------------------------\n" set mainconf [newsplit argv] @@ -134,12 +141,15 @@ set confs [list $mainconf] set dir [pwd] set delay 10 set email 1 +set systemd 0 +catch {exec which kill} kill # If you renamed your eggdrop binary, you should change this variable set binary "eggdrop" while {[set opt [newsplit argv]] != ""} { switch -- $opt { + "-systemd" { set systemd 1 } "-time" - "-1" { set delay 1 } "-5" { set delay 5 } @@ -257,17 +267,64 @@ foreach config $confs { } set nick [string range [subst -nocommands $nick] 0 $handlen] set botnet-nick [string range [subst -nocommands ${botnet-nick}] 0 $handlen] - if {![info exists pidfile]} { - puts " Defaulting \$pidfile to \"pid.${botnet-nick}\"" - set pidfile "pid.${botnet-nick}" + +### systemd stuff +if {$systemd} { + puts "Enabling user lingering..." + if {[catch {exec loginctl enable-linger} res]} { + puts "Oops, something went wrong. Is systemd running on this system?" + exit } - set pidfile [subst -nocommands $pidfile] - if {[catch {open $dir/${botnet-nick}.botchk w} fd]} { - puts " *** ERROR: unable to open '${botnet-nick}.botchk' for writing" + puts "Creating systemd directory..." + catch {file mkdir ~/.config/systemd/user } res + if {[catch {open ~/.config/systemd/user/${botnet-nick}.service w} fd]} { + puts " *** ERROR: unable to open '${botnet-nick}.service' for writing" puts "" exit } - puts $fd "#! /bin/sh + puts $fd "### Eggdrop systemd unit, generated by autosystemd" + puts $fd "" + puts $fd "\[Unit\]" + puts $fd "Description=${botnet-nick} (Eggdrop)" + puts $fd "After=default.target" + puts $fd "" + puts $fd "\[Service\]" + puts $fd "WorkingDirectory=${dir}" + puts $fd "ExecStart=${dir}/eggdrop ${config}" + puts $fd "ExecReload=${kill} -s HUP \$MAINPID" + puts $fd "Type=forking" + puts $fd "Restart=on-abnormal" + puts $fd "" + puts $fd "\[Install\]" + puts $fd "WantedBy=default.target" + close $fd + + catch {exec systemctl --user enable ${botnet-nick}.service} res + puts $res + puts "systemd job successfully installed as '${botnet-nick}.service'." + puts "* Use 'systemctl --user ${botnet-nick}.service' to control your Eggdrop" + puts "Starting Eggdrop..." + if {[catch {exec systemctl --user start ${botnet-nick}.service} res]} { + puts "ERROR: Eggdrop did not start." + puts $res + } else { + puts "Success." + } + exit +} + + +if {![info exists pidfile]} { + puts " Defaulting \$pidfile to \"pid.${botnet-nick}\"" + set pidfile "pid.${botnet-nick}" +} +set pidfile [subst -nocommands $pidfile] +if {[catch {open $dir/${botnet-nick}.botchk w} fd]} { + puts " *** ERROR: unable to open '${botnet-nick}.botchk' for writing" + puts "" + exit +} +puts $fd "#! /bin/sh # # ${botnet-nick}.botchk (generated on [clock format [clock seconds] -format "%B %d, %Y @ %I:%M%p"]) # @@ -360,14 +417,14 @@ fi exit 0 " - close $fd - puts "Wrote '${botnet-nick}.botchk' successfully ([file size $dir/${botnet-nick}.botchk] bytes)" - if {[catch {exec chmod u+x $dir/${botnet-nick}.botchk} 0]} { - puts " *** ERROR: unable to 'chmod u+x' the output file" - puts "" - exit - } - puts -nonewline "Scanning crontab entries ... " +close $fd +puts "Wrote '${botnet-nick}.botchk' successfully ([file size $dir/${botnet-nick}.botchk] bytes)" +if {[catch {exec chmod u+x $dir/${botnet-nick}.botchk} 0]} { + puts " *** ERROR: unable to 'chmod u+x' the output file" + puts "" + exit +} +puts -nonewline "Scanning crontab entries ... " set tmp ".autobotchk[clock clicks].[pid]" set cronbotchk [string map {\\ \\\\ \[ \\\[ \] \\\]} "${botnet-nick}.botchk"] From c76182c8687715d440b4e25385e171fe5175c67e Mon Sep 17 00:00:00 2001 From: Geo Date: Mon, 12 Dec 2022 17:32:00 -0500 Subject: [PATCH 134/201] Update NEWS for 1.9.4 --- NEWS | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/NEWS b/NEWS index 44a6d3594..6dfe4de3d 100644 --- a/NEWS +++ b/NEWS @@ -20,6 +20,8 @@ Eggdrop v1.9.4: General changes: - Fixed a DNS bug causing Eggdrop to often hang on DCC or telnet connections + - BETA: Added -systemd option to autobotchk script to restart Eggdrop via + systemd instead of cron - Reverted matchattr match syntax to previous functionality. Matching against "-" as a flag will once again successfully match against "no" flags, instead of returning an error. @@ -36,6 +38,8 @@ Eggdrop v1.9.4: - Moved the 'gotmsg' function back as a raw bind. It was inadvertantly moved to a rawt bind in 1.9.3, causing issuse with scripts attempting to unbind this internal reference + Module changes: + - None Eggdrop config changes: - None From 15949fb0675bc6a17916022cd7b9f3b39c5b5e52 Mon Sep 17 00:00:00 2001 From: Geo Date: Mon, 12 Dec 2022 17:43:41 -0500 Subject: [PATCH 135/201] update docs for 1.9.4 --- doc/html/about/about.html | 2 +- doc/html/about/legal.html | 2 +- doc/html/index.html | 4 ++-- doc/html/install/install.html | 12 +++++++++--- doc/html/install/readme.html | 20 +++++++++++-------- doc/html/install/upgrading.html | 2 +- doc/html/modules/included.html | 2 +- doc/html/modules/index.html | 2 +- doc/html/modules/mod/assoc.html | 2 +- doc/html/modules/mod/blowfish.html | 2 +- doc/html/modules/mod/channels.html | 2 +- doc/html/modules/mod/compress.html | 2 +- doc/html/modules/mod/console.html | 2 +- doc/html/modules/mod/ctcp.html | 2 +- doc/html/modules/mod/dns.html | 2 +- doc/html/modules/mod/filesys.html | 2 +- doc/html/modules/mod/ident.html | 2 +- doc/html/modules/mod/irc.html | 2 +- doc/html/modules/mod/notes.html | 2 +- doc/html/modules/mod/pbkdf2.html | 2 +- doc/html/modules/mod/seen.html | 2 +- doc/html/modules/mod/server.html | 2 +- doc/html/modules/mod/share.html | 2 +- doc/html/modules/mod/transfer.html | 2 +- doc/html/modules/mod/twitch.html | 2 +- doc/html/modules/mod/uptime.html | 2 +- doc/html/modules/mod/woobie.html | 2 +- doc/html/modules/writing.html | 2 +- doc/html/objects.inv | Bin 1279 -> 1319 bytes doc/html/search.html | 2 +- doc/html/searchindex.js | 2 +- doc/html/tutorials/firstscript.html | 2 +- doc/html/tutorials/firststeps.html | 24 +++++++++++++++++++++-- doc/html/tutorials/setup.html | 2 +- doc/html/tutorials/tlssetup.html | 4 ++-- doc/html/using/accounts.html | 2 +- doc/html/using/bans.html | 2 +- doc/html/using/botnet.html | 2 +- doc/html/using/core.html | 2 +- doc/html/using/features.html | 2 +- doc/html/using/ipv6.html | 2 +- doc/html/using/ircv3.html | 2 +- doc/html/using/partyline.html | 2 +- doc/html/using/patch.html | 2 +- doc/html/using/pbkdf2info.html | 2 +- doc/html/using/tcl-commands.html | 8 ++++---- doc/html/using/text-sub.html | 2 +- doc/html/using/tls.html | 2 +- doc/html/using/tricks.html | 2 +- doc/html/using/twitch-tcl-commands.html | 2 +- doc/html/using/twitchinfo.html | 2 +- doc/html/using/users.html | 2 +- doc/sphinx_source/using/tcl-commands.rst | 6 ++++-- doc/tcl-commands.doc | 13 ++++++------ 54 files changed, 107 insertions(+), 74 deletions(-) diff --git a/doc/html/about/about.html b/doc/html/about/about.html index aaa966ae2..1da39cdbe 100644 --- a/doc/html/about/about.html +++ b/doc/html/about/about.html @@ -177,7 +177,7 @@

        About Eggdrop © Copyright 2022, Eggheads. - Last updated on Nov 10, 2022. + Last updated on Dec 12, 2022. Created using Sphinx 1.8.5. diff --git a/doc/html/about/legal.html b/doc/html/about/legal.html index 29a4e2838..1b1690f18 100644 --- a/doc/html/about/legal.html +++ b/doc/html/about/legal.html @@ -128,7 +128,7 @@

        Boring legal stuff © Copyright 2022, Eggheads. - Last updated on Nov 10, 2022. + Last updated on Dec 12, 2022. Created using Sphinx 1.8.5. diff --git a/doc/html/index.html b/doc/html/index.html index c0d84e9bc..412af9939 100644 --- a/doc/html/index.html +++ b/doc/html/index.html @@ -142,7 +142,7 @@

        Where to find more helpQuick Startup
      3. Upgrading
      4. Command Line
      5. -
      6. Setting up a Crontab
      7. +
      8. Auto-starting Eggdrop
      9. Documentation
      10. Obtaining Help
      11. @@ -375,7 +375,7 @@

        Where to find more help © Copyright 2022, Eggheads. - Last updated on Nov 10, 2022. + Last updated on Dec 12, 2022. Created using Sphinx 1.8.5. diff --git a/doc/html/install/install.html b/doc/html/install/install.html index d6ce5d245..a3a2ba473 100644 --- a/doc/html/install/install.html +++ b/doc/html/install/install.html @@ -212,8 +212,14 @@

        Quick Startup
        It’s advisable to run your bot via crontab, so that it will
        -

        automatically restart if the machine goes down or (heaven forbid) -the bot should crash. Eggdrop includes a helper script to generate a proper crontab script and entry. You can run this script by typing:

        +
        +

        automatically restart if the machine goes down or (heaven forbid) +the bot should crash. Eggdrop includes a helper script to auto-generate either a systemd or crontab entry. To add a systemd job, run:

        +
        ./scripts/autobotchk [yourconfig.conf] -systemd
        +
        +
        +
        +

        or to add a crontab job, run:

        ./scripts/autobotchk [yourconfig.conf]
         
        @@ -284,7 +290,7 @@

        Modules © Copyright 2022, Eggheads. - Last updated on Nov 10, 2022. + Last updated on Dec 12, 2022. Created using Sphinx 1.8.5. diff --git a/doc/html/install/readme.html b/doc/html/install/readme.html index 24d2c1630..4b774c066 100644 --- a/doc/html/install/readme.html +++ b/doc/html/install/readme.html @@ -49,7 +49,7 @@

        Table of Contents

      12. Quick Startup
      13. Upgrading
      14. Command Line
      15. -
      16. Setting up a Crontab
      17. +
      18. Auto-starting Eggdrop
      19. Documentation
      20. Obtaining Help
      21. @@ -247,19 +247,23 @@

        Command Line -

        Setting up a Crontab

        -

        Systems go down from time to time, taking your Eggdrop along with it. You may not be not around to restart it manually, so you can instead use your host’s crontab system to automatically restart Eggdrop should it quit for any reason. Eggdrop comes with an autobotchk shell script creates that both checks if your Eggdrop is still running, and a crontab entry to run the botchk script every 10 minutes.

        +
        +

        Auto-starting Eggdrop

        +

        Systems go down from time to time, taking your Eggdrop along with it. You may not be not around to restart it manually, so you can instead use features of the operating system to automatically restart Eggdrop should it quit for any reason. Eggdrop comes with an autobotchk shell script that can create either a systemd or crontab entry. The systemd option will monitor your Eggdrop and a) start it when the machine boots and b) restart the Eggdrop if it crashes for any reason. The (older) crontab option will check (by default) every 10 minutes to see if your Eggdrop is still running, and attempt to restart it if it is not.

        -

        Using autobotchk is probably the fastest way of creating your botchk and adding a crontab entry. From the install directory, simply run:

        +

        To auto-generate a systemd job, from the Eggdrop install directory, simply run:

        +
        ./scripts/autobotchk <Eggdrop config file> -systemd
        +
        +
        +

        To auto-geneerate a script to check Eggdrop’s status and run it via a crontab entry, simply run:

        ./scripts/autobotchk <Eggdrop config file>
         
        -

        This will crontab your bot using the default setup. If you want a list of autobotchk options, type ‘./autobotchk’. An example with options would be:

        +

        This will crontab your bot using the default setup. If you want a list of autobotchk options, type ‘./autobotchk’. A crontab example with options would be:

        ./scripts/autobotchk <Eggdrop config file> -noemail -5
         
        -

        This would setup crontab to run the botchk every 5 minutes and also to not send you email saying that it restarted your bot.

        +

        This would setup crontab to run the botchk every 5 minutes and not send you an email saying that it restarted your bot.

        diff --git a/doc/html/install/upgrading.html b/doc/html/install/upgrading.html index 7a2842f4b..f66935b1e 100644 --- a/doc/html/install/upgrading.html +++ b/doc/html/install/upgrading.html @@ -191,7 +191,7 @@

        Documentation © Copyright 2022, Eggheads. - Last updated on Nov 10, 2022. + Last updated on Dec 12, 2022. Created using Sphinx 1.8.5. diff --git a/doc/html/modules/included.html b/doc/html/modules/included.html index edffbdbbc..0ea348b20 100644 --- a/doc/html/modules/included.html +++ b/doc/html/modules/included.html @@ -277,7 +277,7 @@

        Modules included with Eggdrop © Copyright 2022, Eggheads. - Last updated on Nov 10, 2022. + Last updated on Dec 12, 2022. Created using Sphinx 1.8.5. diff --git a/doc/html/modules/index.html b/doc/html/modules/index.html index f17d8d8bf..a0b377a35 100644 --- a/doc/html/modules/index.html +++ b/doc/html/modules/index.html @@ -169,7 +169,7 @@

        Do I still need to ‘loadmodule’ modules? © Copyright 2022, Eggheads. - Last updated on Nov 10, 2022. + Last updated on Dec 12, 2022. Created using Sphinx 1.8.5. diff --git a/doc/html/modules/mod/assoc.html b/doc/html/modules/mod/assoc.html index 473290a3f..546553921 100644 --- a/doc/html/modules/mod/assoc.html +++ b/doc/html/modules/mod/assoc.html @@ -159,7 +159,7 @@

        Search

        diff --git a/doc/html/modules/mod/blowfish.html b/doc/html/modules/mod/blowfish.html index bd82779ea..c07a42010 100644 --- a/doc/html/modules/mod/blowfish.html +++ b/doc/html/modules/mod/blowfish.html @@ -164,7 +164,7 @@

        Search

        diff --git a/doc/html/modules/mod/channels.html b/doc/html/modules/mod/channels.html index 5b8fb089b..80a886f81 100644 --- a/doc/html/modules/mod/channels.html +++ b/doc/html/modules/mod/channels.html @@ -540,7 +540,7 @@

        Search

        diff --git a/doc/html/modules/mod/compress.html b/doc/html/modules/mod/compress.html index bde3bc8ae..55b0f5e18 100644 --- a/doc/html/modules/mod/compress.html +++ b/doc/html/modules/mod/compress.html @@ -172,7 +172,7 @@

        Search

        diff --git a/doc/html/modules/mod/console.html b/doc/html/modules/mod/console.html index bdd760ceb..3550c0a6b 100644 --- a/doc/html/modules/mod/console.html +++ b/doc/html/modules/mod/console.html @@ -174,7 +174,7 @@

        Search

        diff --git a/doc/html/modules/mod/ctcp.html b/doc/html/modules/mod/ctcp.html index 70f7884ff..b56e3d14c 100644 --- a/doc/html/modules/mod/ctcp.html +++ b/doc/html/modules/mod/ctcp.html @@ -191,7 +191,7 @@

        Search

        diff --git a/doc/html/modules/mod/dns.html b/doc/html/modules/mod/dns.html index dbdd9a95d..083d15fd6 100644 --- a/doc/html/modules/mod/dns.html +++ b/doc/html/modules/mod/dns.html @@ -187,7 +187,7 @@

        Search

        diff --git a/doc/html/modules/mod/filesys.html b/doc/html/modules/mod/filesys.html index 2ce90adf9..6aa7b62e9 100644 --- a/doc/html/modules/mod/filesys.html +++ b/doc/html/modules/mod/filesys.html @@ -365,7 +365,7 @@

        .filesys module © Copyright 2022, Eggheads. - Last updated on Nov 10, 2022. + Last updated on Dec 12, 2022. Created using Sphinx 1.8.5. diff --git a/doc/html/modules/mod/ident.html b/doc/html/modules/mod/ident.html index 5cfcd7cad..0fb9cf6a6 100644 --- a/doc/html/modules/mod/ident.html +++ b/doc/html/modules/mod/ident.html @@ -228,7 +228,7 @@

        Search

        diff --git a/doc/html/modules/mod/irc.html b/doc/html/modules/mod/irc.html index cd7d05f14..8e5e5f7ba 100644 --- a/doc/html/modules/mod/irc.html +++ b/doc/html/modules/mod/irc.html @@ -290,7 +290,7 @@

        Search

        diff --git a/doc/html/modules/mod/notes.html b/doc/html/modules/mod/notes.html index f27bedad9..f96790008 100644 --- a/doc/html/modules/mod/notes.html +++ b/doc/html/modules/mod/notes.html @@ -182,7 +182,7 @@

        Search

        diff --git a/doc/html/modules/mod/pbkdf2.html b/doc/html/modules/mod/pbkdf2.html index b02d7e06e..ce866e4b4 100644 --- a/doc/html/modules/mod/pbkdf2.html +++ b/doc/html/modules/mod/pbkdf2.html @@ -181,7 +181,7 @@

        Search

        diff --git a/doc/html/modules/mod/seen.html b/doc/html/modules/mod/seen.html index 23b657e19..94b1fad01 100644 --- a/doc/html/modules/mod/seen.html +++ b/doc/html/modules/mod/seen.html @@ -161,7 +161,7 @@

        Search

        diff --git a/doc/html/modules/mod/server.html b/doc/html/modules/mod/server.html index e83a3db20..ca54d385f 100644 --- a/doc/html/modules/mod/server.html +++ b/doc/html/modules/mod/server.html @@ -380,7 +380,7 @@

        Search

        diff --git a/doc/html/modules/mod/share.html b/doc/html/modules/mod/share.html index 2ffb85ec0..39b06314c 100644 --- a/doc/html/modules/mod/share.html +++ b/doc/html/modules/mod/share.html @@ -191,7 +191,7 @@

        Search

        diff --git a/doc/html/modules/mod/transfer.html b/doc/html/modules/mod/transfer.html index 9e2451cf1..6af988989 100644 --- a/doc/html/modules/mod/transfer.html +++ b/doc/html/modules/mod/transfer.html @@ -186,7 +186,7 @@

        Search

        diff --git a/doc/html/modules/mod/twitch.html b/doc/html/modules/mod/twitch.html index c7ad96918..94b38e74c 100644 --- a/doc/html/modules/mod/twitch.html +++ b/doc/html/modules/mod/twitch.html @@ -194,7 +194,7 @@

        Partyline commands © Copyright 2022, Eggheads. - Last updated on Nov 10, 2022. + Last updated on Dec 12, 2022. Created using Sphinx 1.8.5. diff --git a/doc/html/modules/mod/uptime.html b/doc/html/modules/mod/uptime.html index 45993ea2a..cc5e5f575 100644 --- a/doc/html/modules/mod/uptime.html +++ b/doc/html/modules/mod/uptime.html @@ -167,7 +167,7 @@

        Search

        diff --git a/doc/html/modules/mod/woobie.html b/doc/html/modules/mod/woobie.html index b9b05d0a4..aad24ae95 100644 --- a/doc/html/modules/mod/woobie.html +++ b/doc/html/modules/mod/woobie.html @@ -160,7 +160,7 @@

        Search

        diff --git a/doc/html/modules/writing.html b/doc/html/modules/writing.html index db0584e67..4cd607b43 100644 --- a/doc/html/modules/writing.html +++ b/doc/html/modules/writing.html @@ -428,7 +428,7 @@

        What to do with a module? © Copyright 2022, Eggheads. - Last updated on Nov 10, 2022. + Last updated on Dec 12, 2022. Created using Sphinx 1.8.5. diff --git a/doc/html/objects.inv b/doc/html/objects.inv index 769b0721ecbe8dca1923d114d1645a7c5de1f80d..3eeec3c4f2f64ba7cdec65c523bdfc5395e4a612 100644 GIT binary patch delta 1213 zcmV;u1Va1&38xB>dVh^q+m72d5PkPo2uL5}8cl&d6hVN!qKjsOMeHCCMG?>xZ4)b# z0!i8HzwhuWQW`pa*~^?cMhT4zx$=RakvUZqW<-U%$cPH^*ej;5DTIuq5E)59XxXuA0xn_X z`}{~Zw7#qnhS zT=13&Q-6$u<9|b*TyA*8s2{2?lMZ$Iz9FKKJrj+VgQBc?`g+%Fr2(!sr0Z7Ucd1f9 zajEVfTg$NpVxD58Ju*zeBVOR^!_EEkLn00RUXj+yA-n{7>bI0Tc{GH6Fdr(<58J}K zk+h5?Y**?^ZvvR!1RP{|4@Y94ZH!SRanPWrc%;p#lG0!1Is->MzR(_`~sQ2&EL)$_4F)mbLlePO+S>o5VPCb4Z6Vawe5l07b=( z3))Eq8|6|gX7+|jmEKo6ALem2jlu(G4v2YOO{wt0nG<53S5?YAaps7K`PGF+Z=5>g z)Ca2?(SIWghnyHX4bQD1&ew9+Ge3_bz-W{w`f#wnV80bsA?TL zFetb@M8GH_^sc^)hqK@29ak;g%`tGpk9InN=lF%evHzC_0%seJs|H z!(YhW=7zdOpOPvUo{`sXR<9Las#wR&Yj&(toSG`tGV@w3>J#M_6$uaJGPZ!Hk3h-43H)|Wu#56NQkLx%nzDwhl^{r1s zz?f$`eMKdrVH^-->jtaM=QXI(0rq=oq!?w#rp6C{Y-@Y;MPp~pjB>Mf25#BVek>!D z%0ZaoU`r&7A^yJxN`b!G?eK92K7UIDqJLteVFH1_-orR_;?RzE9&ek6H+JlejsnsM zW)KM%kDrk)$JVbenzs4Og{HM-Z~7#1egSiGO6_ za2?w}^N)d$;k=Qe z5t)F5Q-J^Mz}2jWtu`Dw6_%AmI&2wn*tJbt9==hWzG4&?56#k^h@kKhvEhAsj%(cI zPqsf#nw)}ff9xi_$l_v|VT bJ{-V23}`K~0Rr`{Y=i)MIYj&i88NeH3Jp#f delta 1173 zcmV;G1Zw-I3jYa^dVhsi%Z?j25WMRv25^p6gg8JBx$P5P*lR2-894?V4kZygA_pW# zTK#>R&mm`;%4Jt#broOT#TIGhXg0+DZM5nB?j&v2e>7wo{{3i9eRJm`o(_jj$zkQ; zo*hWPWVvC_x|fQJLlXnX{eDHXhG0wTNy~amJIQYBncl$vjemn3`O|OBor`^S@T%?Q zWzY4o&W#a~ejgb@fgXtvtk-pg7!eg7A|oou)1a8Xr4S;LLS!Tbp=Hl*3AliX@8cug z(BTFb&_vulyhTofr&=TQBl^s{CsFyX@IK@>HAIiU#b*PT&nwG zb2*kkj8lwsCx$6_#0&ghwC~5ej7eITzXXHg7#y_x_|r_=2%YGO=4WQIi_V#oLNp3 zK#?2Mg7#9Kh~ZMK7Dj|gl`d6!6y`=Xjl!)KUWK_*O{s9Lg=b;zR8`8|YvEmpP1S`a z7n^(7+_9<}(aj1kn^{+l99=EJ-3u#z& z0}k}`AAc?m5g6L{ZvUmG;88E}cK_}1`3t6@nRQoO!D61jwNWTrotdihEgBVEB&KmB zs+xxm3<@p|5ip7fy{|7L;$CJKqcJ5gC0Z?bj|LSViD-<2;iu|;JQ^Pc7l~+Gq-=Rr z!=ql~A0Ii>xF~LBkJAha><|a9Z0V}2DL2uVWPi#|cuR`>%yJTCW?2c;GA}hFiq85& zKNfSy;cw(%V?*Aev!u+0Ir7}i^0mTC8S9vN&Q5uXQ&Xl|W}d4>exlqWLxDceQ8OB7 z#7VEg*OWGzDn1mhg$7jbcU5xv;%^)t_9kC--0R~VZYZ#ib-}VYW(o0vbING6n0k3C^su-;FbkF zYFO2VP%1}Zii0hY(1!SL4Wt5nx7*><4t#t|1fpU`Lk9w%K0`Zn=1`8dbMBg_4|W=i zjsnsMW)KNC9)Iw;7@NO7X}ab+7j{8Ggn!D?tf$ekJA1Hk;gaJ5_KcWOF=Q7JDK(zM zXrS}q{MV9dN5eDwX7O?yHC zpFJYkaCnaG$GmM15zZSqG_(jiVKMEgx(>GM-FzkbI9-sT{TkZ96I>l~&^cNj_J5B0 zy0%D^VjpI$#}<(ZNH_)fW*e?%JGR166vvJ#AeqPZF%@car%x?+;}LK?o0%Q z9}zn~q1mXyf3bGV892x-^VQcNVCr~XH-glI! nZuS6IZV-&;)ny#~Z~*f#ptZ^x2oBV@vK9j9WfSoqL41_VbRaMs diff --git a/doc/html/search.html b/doc/html/search.html index abcccf546..bab736ece 100644 --- a/doc/html/search.html +++ b/doc/html/search.html @@ -147,7 +147,7 @@

        Search

        diff --git a/doc/html/searchindex.js b/doc/html/searchindex.js index 4857dc0ce..8beae41b2 100644 --- a/doc/html/searchindex.js +++ b/doc/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["about/about","about/legal","index","install/install","install/readme","install/upgrading","modules/included","modules/index","modules/mod/assoc","modules/mod/blowfish","modules/mod/channels","modules/mod/compress","modules/mod/console","modules/mod/ctcp","modules/mod/dns","modules/mod/filesys","modules/mod/ident","modules/mod/irc","modules/mod/notes","modules/mod/pbkdf2","modules/mod/seen","modules/mod/server","modules/mod/share","modules/mod/transfer","modules/mod/twitch","modules/mod/uptime","modules/mod/woobie","modules/writing","tutorials/firstscript","tutorials/firststeps","tutorials/setup","tutorials/tlssetup","using/accounts","using/bans","using/botnet","using/core","using/features","using/ipv6","using/ircv3","using/partyline","using/patch","using/pbkdf2info","using/tcl-commands","using/text-sub","using/tls","using/tricks","using/twitch-tcl-commands","using/twitchinfo","using/users"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,sphinx:55},filenames:["about/about.rst","about/legal.rst","index.rst","install/install.rst","install/readme.rst","install/upgrading.rst","modules/included.rst","modules/index.rst","modules/mod/assoc.rst","modules/mod/blowfish.rst","modules/mod/channels.rst","modules/mod/compress.rst","modules/mod/console.rst","modules/mod/ctcp.rst","modules/mod/dns.rst","modules/mod/filesys.rst","modules/mod/ident.rst","modules/mod/irc.rst","modules/mod/notes.rst","modules/mod/pbkdf2.rst","modules/mod/seen.rst","modules/mod/server.rst","modules/mod/share.rst","modules/mod/transfer.rst","modules/mod/twitch.rst","modules/mod/uptime.rst","modules/mod/woobie.rst","modules/writing.rst","tutorials/firstscript.rst","tutorials/firststeps.rst","tutorials/setup.rst","tutorials/tlssetup.rst","using/accounts.rst","using/bans.rst","using/botnet.rst","using/core.rst","using/features.rst","using/ipv6.rst","using/ircv3.rst","using/partyline.rst","using/patch.rst","using/pbkdf2info.rst","using/tcl-commands.rst","using/text-sub.rst","using/tls.rst","using/tricks.rst","using/twitch-tcl-commands.rst","using/twitchinfo.rst","using/users.rst"],objects:{},objnames:{},objtypes:{},terms:{"04may2000":35,"3rd":5,"5c0":[21,30,35],"break":[15,42],"byte":[17,21,23,27,42],"case":[14,19,21,28,30,32,35,42],"catch":42,"char":[27,35,42],"const":27,"default":[2,3,4,10,11,14,15,17,21,23,29,30,31,32,33,35,41,42,44],"export":45,"final":[0,4,28,29,30,35,41],"function":[0,1,2,4,6,7,19,24,30,34,35,37,41,42,45,46],"import":[27,28,29,30,32,35,39,42],"int":27,"long":[6,10,14,18,21,22,33,35,42,43,46],"new":[4,5,7,19,24,28,29,30,32,35,36,37,38,39,40,41,44,45,47],"null":27,"public":[0,1,4,28,29,31,35,42,44,45,48],"return":[17,27,32,41,46],"short":[2,27,29,37,44],"static":[2,3,10,27,29,42],"super":2,"switch":[5,27,30,32,35,42,44,45],"throw":42,"true":28,"try":[3,4,6,7,20,21,25,27,28,29,30,32,35,46],"var":42,"void":27,"while":[0,4,5,10,16,24,30,32,33,35,39,41,42,47],AND:[19,30,42],ARE:28,Adding:[2,24,47],And:28,CVS:4,DNS:[2,6,42],DOING:28,For:[1,2,3,5,7,15,21,30,31,34,35,37,38,39,41,42,44,45,46,47],IPs:[29,31,37],NFS:23,NOT:[5,28,30,32,34,35,42,46],Not:[6,21,29,38],One:[0,4,28,32,42],THE:3,TLS:[2,3,4,5,29,30,35,42],That:[24,28,30,34,42,48],The:[0,1,2,3,4,5,6,10,11,13,14,15,16,19,21,22,23,24,25,27,28,29,31,32,33,34,35,36,38,41,42,44,45,46,47,48],Their:37,Then:[5,29,30,44],There:[1,3,4,10,11,12,13,14,15,16,17,18,19,21,22,23,24,27,28,29,31,32,33,35,37,41,43,44,47,48],These:[5,11,17,27,30,32,33,34,35,37,43,44,46,48],Use:[16,17,19,21,27,30,35,42],Used:42,Useful:42,Using:[2,4,27,42],WILL:46,With:[0,4,6,15,34,35,41,42,44],YES:7,Yes:7,aaa:[],abcdechannel:42,abil:[2,7,16,31,32,36,42],abl:[3,6,10,15,17,21,30,32,35,39,41,42],abort:[23,30,42,44],about:[2,4,6,24,25,27,28,29,35,42,45,47],abov:[1,4,10,17,19,27,28,29,36,42,43],absolut:[0,31,42,48],abus:[0,2,4],accept:[15,22,24,31,34,35,42,44,47],access:[0,4,16,21,27,28,29,30,36,39,41,42,44,46,47,48],accomplish:3,accord:[1,42,48],accordingli:21,account:[0,2,4,16,18,27,29,30,36,38,40,41,47],accur:[32,42,46],accuraci:32,across:[0,4,34,38,40,42,45],act:[16,27,35,36,42,44],action:[28,29,31,35,42],activ:[2,10,16,30,32,33,39,42,44],actual:[0,4,15,27,28,31,35,39,42],acut:[],add:[3,4,5,7,10,16,17,24,27,28,30,31,32,34,35,36,41,47],add_builtin:27,add_hook:27,add_tcl_command:27,add_tcl_int:27,add_tcl_str:27,added:[0,3,4,5,19,22,24,28,30,32,34,35,36,37,38,41,42,44,46],addhost:17,adding:[4,7,21,27,35,36,38,42],addit:[2,4,5,16,21,30,35,42,44,46],addition:[16,30,32,42],addlang:[35,42],address:[18,22,25,30,34,35,37,44],addus:30,adh:35,adjust:[0,4,17],admin:[35,43],admit:23,advanc:[0,2,4,6,20,28,36],advantag:[5,30,45],advertis:[0,4,42],advis:[3,21,23],affect:[5,10,24,35,36,37,42,47],affet:42,affili:[1,47],after:[3,4,10,16,17,21,27,28,29,32,33,35,42,44,45,47],afterward:[17,35],again:[6,15,25,27,33,34,35,41,42,46],against:[10,15,19,21,28,30,41,42,46],age:42,aggress:34,aka:35,alarm:42,alert:[32,47],algorithm:[19,41],all:[1,5,6,7,10,13,14,15,17,19,21,22,27,28,29,30,31,32,33,34,35,36,37,38,39,41,42,44,45,46,47,48],alloc:[27,42],allow:[0,3,4,5,6,7,10,11,15,16,17,18,19,21,22,23,24,27,28,29,30,32,34,35,36,41,42,44,45,47],alltool:35,almost:[0,4,30,33,48],along:[4,15],alphabet:35,alphanumer:47,alreadi:[10,21,27,28,30,31,32,34,35,41,42,47],also:[0,2,3,4,7,10,11,12,13,14,15,16,17,18,19,21,22,23,27,28,29,30,33,34,35,36,39,41,42,43,44,45,46,47,48],alt:[21,35],alter:[15,36,42,47],altern:[2,4,16,21,30,31,34,35,42,44],although:[17,30,35,42],altnick:[21,30],altogeth:19,alwai:[0,3,4,10,30,32,33,35,42],amount:[6,35],anachron:31,ani:[0,1,3,4,5,7,12,15,16,17,18,21,22,24,27,28,29,30,33,35,36,39,41,42,44,46,47,48],annoi:28,announc:32,anonym:35,anoth:[0,10,15,17,18,21,22,27,30,34,35,42,43,46],another:5,ansi:42,answer:[0,7,13,16,21,28],any_other_funct:27,anymor:[6,9,19,35],anyon:[10,33,42],anyth:[0,4,15,28,29,30,34,35,39,42,46],anywai:35,anywher:[39,42],aol:[28,41],aop:10,apart:[27,35],api:6,apostroph:39,appear:[29,30,34,35,42,46],append:[27,42],appli:[30,33,35,41,48],applic:[1,35,42],appreci:31,appropri:[3,5,30,35,38,40,41],april:[24,46],apt:[30,31],arbitrari:42,arbitrarili:46,archiv:4,area:[6,15,35,42,45,48],aren:[30,35,42,45,46],arg:27,argument:[15,17,28,29,37,42,46],around:[0,4,24,31,37,42,47],arriv:42,ascii:42,ask:[4,17,29,30,39,42,44],assign:[34,35,42],assist:[2,30,32,44],assoc:[2,6],associ:[24,32,42,47],assum:[21,28,30,31,32,33,35,42],assumpt:38,assur:46,asynchron:[6,14,42],attach:[32,42,46],attack:[10,19,41],attempt:[5,10,16,17,21,24,31,32,33,34,35,42,44,47],attent:[5,21,32,42],attribut:[33,34,42,48],auch:27,aug:42,august:17,auth:[35,44],authent:[2,32,41,42,47],author:[28,31,35,44],auto:[34,48],autobotchk:[3,4,29],autoconf:3,autoconfigur:3,autodetect:44,autohalfop:10,autom:[0,2,4],automat:[2,3,4,5,12,16,21,30,32,33,34,35,36,37,41,42,44,47,48],autoop:10,autosav:12,autovoic:[10,48],avail:[4,10,15,19,25,27,29,30,31,35,36,37,39,42,47],avoid:[6,14,29],awai:[36,38,42],awar:42,awesom:28,b33f:30,baa:42,back:[21,28,30,35,37,40,41,42,45],background:[2,4,28],backslash:30,backup:[5,27],backward:[5,38],bad:[10,42,48],badg:48,badgui:46,ban:[0,2,4,10,17,24,34,35,36,47,48],bandwidth:[6,11],banner:[35,43],bar:42,barr:35,base64:29,base:[4,30,32,35,41,42],basi:30,basic:[2,4,6,7,20,28,30],bask:40,bbb:[],bcst:42,bear:1,becaus:[0,4,16,21,27,28,35,42,45,46,47],becom:[29,30,35,42],been:[0,1,4,5,15,17,21,27,33,35,36,42,46],beerbot:32,befor:[0,4,10,14,16,17,18,21,22,23,27,29,30,32,34,35,42,47],began:38,begin:[16,28,37,42],behalf:42,behav:42,behavior:[13,17,33,35,37,42],behind:35,being:[0,4,10,15,17,21,31,32,36,37,42,46],beldin:34,bell:42,belong:35,below:[10,15,16,22,24,27,28,30,35,41,42,46],best:[2,3,6,16,30,34,42,46],better:[3,4,6,20,30,35],between:[3,6,10,15,18,21,22,31,32,34,35,37,42],beverag:41,big:[5,23,42,45],binari:[3,31],bind:[2,16,17,21,24,27,28,32,35,45,47],birthdai:35,bit:[3,15,24,28,30,31,35,42,44,47],bitch:10,bitchx:42,blank:42,bless:1,blindli:17,bloat:7,block:[23,24,27,30,43,47],blowfish:[1,2,5,6,19,27,35,41,42],bodi:28,bogu:35,bold:[4,42,43,48],boldfac:42,boot:35,bore:[2,4],boston:1,bot:[0,1,3,4,5,6,7,10,12,13,14,16,17,18,19,20,21,22,23,25,27,28,29,30,31,33,35,36,37,38,39,41,43,44,45,46,47,48],bota:34,botaddr:42,botaddress:42,botattr:34,botb:34,botc:34,botchk:[4,29,30],botdir:30,botfl:42,botflag:[2,22],both:[0,4,10,21,23,31,32,34,37,41,42,44],botnam:34,botnet:[0,2,3,4,6,8,10,12,15,21,25,30,36,37,39,41,42,45,48],botnetcentr:43,botnetnick:42,botnetop:10,botnick:[21,28,29,30,35],bottom:28,bottre:2,bounc:17,bound:[16,35,42],boundari:14,box:[30,35],brace:10,bracket:37,branch:[4,40],breach:42,brief:30,broadcast:[24,39,42,46,47],broken:[15,28,35,42],brows:15,brute:19,buf:17,buffer:22,bug:[0,3,4,28,30,40],build:42,built:[2,16,42,45],builtin:[16,42],busi:28,button:[40,47],bypass:42,bywho:42,cach:[14,42],cafil:[35,44],calcul:21,call:[0,3,4,27,28,29,34,35,42,46],callback:32,can:[0,3,4,5,6,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],cancel:[6,42],cannot:[0,27,30,32,41,42,48],cap:[2,27,32,36,47],cap_net_bind_servic:16,capabl:[2,35,36,42,45,47],capac:47,capath:[35,44],capit:[4,48],caption:[],captur:[30,42,45],care:[35,42,47],carefulli:[30,42],carelessli:5,categori:42,caught:42,caus:[16,30,34,42,45],caution:42,cbc:42,ccht:46,center:43,central:[15,35],cerfif:[],cert:[29,35,44],certain:[33,35,36,37,42,43,46,48],certainli:[24,30,47],certif:[2,3,21,29,31,35,42],certifict:44,cet:35,chaddr:[5,34],chain:[35,44],challeng:[28,29],chan:[5,10,17,28,29,30,45],chanc:30,chanfil:[10,30,45],chang:[1,2,6,9,10,15,17,19,21,22,24,28,30,31,34,35,36,38,39,40,44,46,47],chaninfo:[29,34],chanmod:[10,29],channel:[0,2,4,5,6,8,12,17,20,21,22,24,27,28,30,32,33,34,35,36,39,43,45,47,48],channelflag:42,chanrec:[17,42],chanserv:10,chanset:[10,29,34],charact:[2,10,15,21,30,34,35,37,41],chase:[0,4],chat4:2,chat6:2,chat:[0,2,4,6,13,21,29,30,34,35,36,39,42,44,46,47],chatter:35,chattr:[29,48],check:[2,4,5,10,21,27,28,29,31,35,41,42,44,46],checkout:[30,40],chfinger:35,chghost:[36,38],chjn:42,chmod:[3,35],chof:42,choic:[1,21,28],chon:42,choos:[3,7,29,30,35,36,47],chpass:41,chpt:42,chri:1,chunk:21,cidr:[35,42],cipher:[35,42,44],claim:[24,47],clarifi:33,clean:15,clear:[4,6,40,42,44,46,47],clearchat:[24,46],clearmsg:[24,46],cleartext:42,clemson:48,click:[40,47],client:[15,16,21,24,29,30,32,35,38,42,44,47],cloak:29,clone:[2,4,10,30],close:[27,42],cmd:[35,42],cmd_t:27,cmsg:46,code:[1,2,3,4,7,27,28,42],coder:[],col:43,cold:[40,41],colon:[35,37],color:[4,42],column:43,com:[2,4,5,6,20,21,28,29,30,34,35,41,42,44],combin:[36,42],combo:29,come:[4,6,17,21,30,40,42],comfort:30,comma:[35,39,42],commadlin:30,command:[2,3,6,10,12,15,16,17,20,21,27,28,29,30,31,32,33,34,35,36,37,39,41,44,47,48],commandlin:30,comment:[15,17,25,28,30,35,41],commerci:30,common:[2,21,30,31,34,35,38,44,48],commonli:[29,31,35,42],commun:[2,27,34,39,40,42],compat:[3,5,38,42,46,47],compil:[0,2,3,4,27,30,31,35,37,42,44],complet:[3,4,10,15,22,30,36,42,44,48],compliant:[17,21,42],compon:42,comprehens:46,compress:[2,6,29],compris:38,concurr:[35,41],conf:[3,7,16,29,30,38,42,44],config:[2,3,4,6,7,10,11,12,13,14,16,17,18,19,21,22,23,24,25,27,28,29,31,32,33,34,35,37,41,43,44],configfil:42,configur:[2,3,4,5,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,35,37,40,42,44],confirm:[40,42],conflict:16,confus:42,connect:[2,4,5,6,14,15,16,21,24,27,29,30,34,35,37,39,44,47,48],connet:[],consequ:46,consid:[4,30,32,33,35,39,42],consider:41,consist:[34,36,39,42],consol:[2,4,6,10,27,36,39],constantli:27,constitut:[10,21,35],consult:[37,38,44],contact:[28,35],contain:[1,3,4,5,28,30,32,34,35,37,42,44,46],content:[41,42,46],contest:6,context:27,continu:[30,42],contribut:40,control:[0,2,4,17,21,28,29,34,35,36,44,47,48],conv_form:29,conveni:35,convers:[27,39,44],convert:42,cooldud:30,coordin:35,copi:[1,2,5,7,15,23,27,30,42],copyright:[0,1,3,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,33,34,35,36,37,38,39,40,41,42,43,44,45,48],core:[2,3,6,7,17,18,21,27,28,42,45],correct:[3,31,35,41],correctli:[3,42],correspond:[10,29,33,42],cos:10,could:[1,21,28,34,35,37,40,41,42,44,47],couldn:42,count:21,counterpart:42,coupl:42,cours:[3,28,34,35,42],cover:[32,33,34],cpu:[21,35,42],crappi:42,crash:[3,42],creat:[0,3,4,15,16,22,27,28,29,30,33,35,40,41,42,44,45,47],creation:[29,32],credit:[28,42],cron:42,crontab:[2,3,29,42],cross:30,crotab:[],crt:[29,35,44],crypto:41,cryptograph:[19,41,42],crytopgraphi:41,ctcp:[2,6,10,21,29,30,35,42,44],ctcr:42,ctrl:42,curl:30,current:[2,4,6,7,9,15,17,18,19,24,27,29,30,32,35,36,39,42,43,44,46],custom:[16,21,28,29,32,36,42,44],cut:29,cycl:[10,21,35],cygwin:[2,37],daemon:[16,29,35],dai:[18,23,35,42,45],daili:[30,42],dalnet:[4,17,21],danc:42,danger:42,danish:35,data:[4,10,22,27,31,41,42],databas:[15,42],date:[1,4,30,32,35,42],db8:[21,30,35],dcc:[0,2,4,6,15,20,21,23,27,29,30,34,36,37,39,41,45],dead:30,deal:[35,42,48],dealloc:27,deauthent:32,debian:[30,31],debug:[3,25,27,28,35,42,44,46],dec:[15,42],decemb:[0,26,36,39],decent:27,decid:[38,41],decis:47,declar:[28,42],decreas:35,defens:28,defin:[4,6,10,11,13,17,21,27,28,30,32,33,34,35,38,42,48],definit:[28,30,31,41],degrad:47,dehalfop:[10,42,48],del_hook:27,delai:[10,15,17,28],delet:[30,42,45],deliber:44,delimit:42,deliv:42,demand:[0,4],demonstr:[6,26,42],denot:[31,42],deop:[10,42,48],depend:[27,32,33,40,42,44,48],deprec:[5,31,42],deprici:21,depth:[35,44],der:29,deriv:41,desc:[6,27],describ:[27,28,30,31,34,35],descript:[6,27,28,29,35,42,46,48],descriptivebranchnam:40,deserv:28,design:[0,2,4,19,38,46],desir:[7,27,29,30,41],despit:31,dest:[3,6,30,31,35,42,44],destin:[16,27],destroi:[0,4],detail:[3,4,6,27,30,32,42,44,46],detect:[7,21,31,37,42,44],determin:[2,3,16,27,29,30,34,37,42,44],dev:[4,30,31],devel:3,develop:[0,1,2,3,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,30,31,33,34,35,36,37,38,39,40,41,42,43,44,45,47,48],devleop:[],dict:[42,46],dictionari:42,did:[1,41],didn:[28,30,42],die:[27,29,30],died:21,differ:[1,3,4,5,10,15,21,28,31,32,35,41,42,45,46],differenti:42,diffutil:3,digest:[19,42],digit:[35,44],dinner:41,dir:[6,29],direct:[7,31,34,40,42],directli:[5,6,10,16,22,30,42],directori:[2,3,4,6,7,23,27,29,30,31,36,40,44,45],disabl:[10,17,21,35,37,42,44],disc:42,discard:[22,42],disclaim:[2,42],disconnect:[21,22,35,42],discontinu:47,discourag:17,discuss:[4,40],disk:[0,23,30,35,36,42],displai:[12,15,17,21,29,30,35,42,43,46],displaynam:27,dispos:42,dissect:28,distinguish:42,distribut:[0,1,4,30],distro:31,dload:23,dns:[6,14,35,42],doc:[0,3,4,5,6,21,28,31,35,39,42,46,47],document:[2,16,28,30,31,34,37,38,40,44,45],doe:[10,24,28,29,32,33,35,38,39,42,46,47,48],doesn:[12,14,17,30,39,42,45,46],doing:[19,21,28,35,42,43],domain:[1,14,34],don:[4,7,10,14,15,17,21,22,24,27,28,29,30,34,35,39,42,44,45],donat:[24,47],done:[5,22,27,29,30,31,34,40,41,42,47],donkei:30,dontkickop:10,dot:39,doubl:21,doubt:37,down:[0,3,4,15,34,42],downer:24,download:[3,4,5,7,15,23,35,36,42],dozen:28,dp_help:27,dp_log:27,dp_mode:27,dp_server:27,dp_stdout:27,dport:16,dprintf:27,drastic:[27,42],driven:42,dronepup:42,drop:[3,4,35,42],dropp:[],dst:6,due:[17,21,28,35,42,46],dump:[21,35,42],duplic:42,dupwait:35,dure:[3,11,22,27,29,30],dynam:[2,3,10,29,30,33,42],dynamicban:[10,42],dynamicexempt:[10,42],dynamicinvit:[10,42],each:[0,4,6,10,15,18,23,28,29,30,32,34,35,36,39,42,45,46,48],earlier:19,easi:[5,28,30,42,44],easier:[3,19],easiest:42,easili:[0,1,2,4,28,36,42],east:35,ebai:35,ecb:42,ecdsa:29,echo:[36,38,45],ecparam:29,eden:42,edit:[2,3,28,45],editor:[29,30],editplu:30,edu:[42,48],effect:[15,33,35,42],effici:[0,4,30,34,35,36],effort:[0,2,4,42],efnet:[4,17,21],egg_lang:35,eggdrop1:7,eggdrop:[1,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,33,34,37,38,41,43,44,45,47,48],eggdroptest:[32,46],egggdrop:2,egghead:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,30,33,34,35,36,37,38,39,40,41,42,43,44,45,48],egghelp:[4,30],eight:[35,42],either:[3,4,15,16,29,30,31,32,33,34,35,37,42,44,46],element:42,elimin:29,els:[28,39,42],email:[4,29,35,42],embed:42,emerg:38,emot:46,empti:[42,46],enabl:[0,2,4,7,10,12,15,17,21,23,27,28,30,34,35,36,37,38,44,45,47],enclos:[10,37,42,46],encod:[42,43],encount:[30,47],encourag:[2,30,41],encpass2:41,encrypt:[2,5,6,9,19,29,31,34,36,44],end:[3,27,35,41,42,43],endless:10,enforc:[10,29,32,35],enforceban:10,english:[35,45],enhanc:7,enjoi:41,enlarg:3,enough:35,ensur:[27,29,30,34,41,42],enter:[3,10,15,29,31,35,39,40,41,42,44,46],entir:[30,42,46,47],entitl:48,entri:[3,4,29,30,35],env:35,environ:[16,35,36,44],eof:42,equal:42,equival:[6,21,31],equivil:[],eras:[15,42],error:[4,21,27,30,35,42,47],escap:42,especi:28,essenti:41,est:35,establish:[37,42,44],etc:[0,2,4,10,17,24,27,30,32,34,35,36,42,45,48],eth0:16,ethic:35,etiquett:4,european:35,evalu:42,even:[0,4,7,15,17,27,30,33,34,35,36,39,42,47],event:[0,4,24,27,32,34,35,46,47],eventu:19,ever:[29,30,35,42,44],everi:[0,3,4,10,15,17,21,23,27,28,29,32,33,35,37,41,42,48],everydai:35,everyon:[39,42],everyth:[3,28,42],everywher:[35,37,42],evnt:[21,42],exact:42,exactli:[15,17,27,28,42],examin:27,exampl:[2,3,4,5,7,15,16,21,27,28,29,30,31,35,39,42,44,45,46,47],exceed:35,except:[4,13,21,27,35,42,44],excess:[4,10,21],exchang:29,exclud:42,exclus:[21,42],execut:[2,3,7,27,28,32,42],exempt:[0,1,2,4,10,17,24,34,36,47,48],exhaust:[42,46],exist:[0,4,15,21,27,32,41,42,46,47,48],exit:[4,6,12,15,21,42],expand:[0,2,4],expans:42,expect:[6,13,35,42],experi:[3,15,28,30],experienc:3,expir:[10,17,18,21,33,35,42,44],explain:[10,42],explan:[10,30,31,42,46],explicit:38,explicitli:[5,42,44],express:42,extend:[24,36,38,42],extens:[3,30,32],extern:[16,29,35],extra:[7,35,38],extract:[30,42],f270:30,face:47,fact:[0,4,46],fail:[14,23,35,42,44],failur:[42,46],fake:42,fals:42,famili:35,familiar:[4,28],fanci:41,fancyp:28,far:15,fast:30,faster:42,fastest:4,fatal:42,fault:27,favor:[5,22],featur:[0,2,4,7,10,17,21,22,29,30,32,35,37,38,40,42,44,47,48],februari:13,feel:[4,5,27,40],few:[24,28,30,31,35,42,47],field:[21,32,35,42,44],fifth:1,fight:10,figur:[3,30],fil:42,file:[1,2,3,4,6,7,8,9,10,11,12,13,14,16,17,18,19,20,21,22,23,24,25,26,27,28,29,32,33,34,36,37,41,43,44,48],file_receiv:42,file_send:42,file_send_pend:42,filearea:42,filedb:[15,42],filemask:6,filenam:[6,10,18,30,35,44],filepath:6,files:15,filesi:[2,6,35],filestat:6,filesystem:[15,42,48],fill:[35,40,44],filt:[27,42],find:[3,6,14,17,20,27,28,29,30,39,40,42,47],fine:[17,21,35,46],finger:[13,30],fingerprint:[29,35,44],finish:[4,15,30,42],finnish:35,firewal:35,first:[0,2,4,5,15,19,21,27,28,30,31,34,35,41,42,44,45,46],five:42,fix:[0,3,4,27,35,42],flag:[2,5,6,10,13,17,22,27,28,30,35,36,43],flagmask:46,flash:43,flat:42,flexibl:[42,44],flood:[0,4,10,13,18,21,34,35,36,42,48],floor:1,flud:42,flush:22,focus:[24,47],folder:7,follow:[3,4,5,10,15,17,21,24,27,30,31,34,35,36,38,40,41,42,43,44,45,46,47],foo:[28,29,42],forbid:3,forc:[3,10,12,15,19,22,28,35,37,42],forcefulli:44,forev:35,forget:42,fork:[31,40],form:[0,4,27,28,42,43],format:[7,21,27,29,30,31,35,41,42,43,46],forward:18,found:[2,4,27,35,42,46],foundat:1,four:[10,28,32,35,37,42,43],fourth:28,fprint:[35,44],fragil:42,franklin:1,free:[1,2,5,27],freebsd:37,freeli:[0,4],freenod:21,french:35,frequent:[4,30],fresh:35,fri:42,friend:[10,48],frim:27,from:[0,1,2,3,4,5,6,7,10,15,16,17,18,19,21,22,24,27,28,29,30,31,32,33,34,35,37,39,41,43,44,45,46,47,48],front:[10,28,30,31,42,47],ftp:[5,30],full:[3,4,5,24,30,37,42,44,46,47],fuller:1,fulli:[5,35,42,47],fun:[3,47],func:27,func_nam:27,func_tabl:27,function_to_cal:27,further:[29,42],futur:[3,17,30,41,42],fwd:18,gain:[0,4,41,48],game:[0,2,4,24,47],garbag:27,gatewai:[24,46,47],gave:30,gayteen:0,gcc:3,gener:[0,1,3,4,19,24,28,29,30,38,41,42,44,47],genkei:29,genrsa:35,geo:28,german:35,get:[6,7,10,21,22,23,27,28,31,32,35,39,48],geteggdrop:[2,4,30],getinfo:42,getop:10,gif:15,git:[2,3,30,40],github:[2,4,30],give:[3,4,10,15,21,28,30,34,35,36,39,41,42,48],given:[4,14,15,16,30,42,46],global:[2,12,16,17,21,22,27,28,33,34,46,48],globalflag:42,gmt:[35,42],gnu:[0,1,3,4,11],goe:[3,10,29,33,34,39,42,44],going:[0,4,15,21,28,31,32,42],gone:[17,42],goober:42,good:[0,15,21,24,28,30,35,42,47,48],got:42,gpl:[0,4],grab:42,grain:28,grant:[29,36,44,47],graphic:44,greater:42,gree:28,greet:[0,2,4,10,28,32],greetmsg:28,greetscript:28,grep:29,ground:35,group:[15,16,35,38,42],grown:0,gseen:[6,20],guarante:[17,32],guess:17,gui:46,guid:[2,3,28,30,31],gunzip:30,guppi:42,gzip:[11,42],had:[3,5,10,34,35,42,47],haha:4,halfop:[10,42,48],hand:[28,35,42],handi:30,handl:[28,29,33,35,41,44,46],handshak:42,hang:[6,14],happen:[28,30,33,35,42],hard:[28,35],harder:28,hardwar:[0,4],has:[0,1,2,4,5,10,14,15,17,21,28,30,31,32,33,34,35,36,37,41,42,44,46,47,48],hash:[2,5,19,30],hasn:21,hate:48,have:[0,1,3,4,5,6,9,10,12,15,17,18,19,21,22,24,27,28,29,30,31,32,33,34,35,36,37,39,41,42,44,45,46,47,48],haven:30,head:35,header:[2,4,27,28,31,44],heaven:3,held:46,hello:[17,21,29,30,35,36,42],help:[0,3,13,21,27,28,29,30,33,34,35,37,39,42,43,48],helper:3,henc:[7,27,42],here:[2,4,10,13,14,15,17,18,21,23,28,29,30,33,34,35,42,45,46],herself:4,hidden:[15,30,36],hide:[6,37,42],high:45,higher:[17,19,22,23,30,44],highest:42,highli:[3,21,30],highlight:48,him:1,himself:4,hint:28,his:[21,30],histor:42,histori:46,hit:42,hold:[22,42],hole:35,home:[3,15,16,29,30,44],hook:27,hook_5minut:27,hook_backup:27,hook_daili:27,hook_di:27,hook_hourli:27,hook_idl:27,hook_load:27,hook_minut:27,hook_num:27,hook_pre_rehash:27,hook_read_userfil:27,hook_rehash:27,hook_secondli:27,hook_userfil:27,hope:[30,47],hopefulli:[3,42],hors:30,host:[0,2,4,10,16,21,24,28,33,34,35,44,46,48],hostmask:[28,29,33,34,36,41],hostnam:[6,10,14,29,35,37],hosttarget:[24,46],hour:[6,25,27,33,35,42],hourli:[18,27,35],how:[0,3,6,10,13,14,15,18,21,22,24,28,29,30,31,33,34,35,42,44,45,46,47],howev:[4,7,13,21,29,31,32,35,41,42,44,45],htgt:46,html:[4,37],http:[2,4,6,20,25,30,32,38],hub:[4,22,30,34,35,41,44],hubbot:31,hubcap:48,humor:29,hup:42,hurt:5,iconfig:[3,7,30],idea:[28,30,40],ideal:[41,47],ident:[2,6,7,17,21,29,35,37,41,42],identd:[16,30],identifi:[29,35,41,42,48],idl:[10,27,42],idx:27,ignor:[0,4,13,21,22,28,34,35,36,42,46],ill:42,imag:4,immedi:[21,30,32,41,42],imperson:16,implement:[6,7,16,31,32,35,38,40,41,42,47],implementatino:31,impli:[1,27],importantli:28,improv:[0,4],inact:[10,23],inc:1,incess:0,includ:[0,2,3,4,7,17,25,27,29,30,31,33,35,36,37,41,42,44,46,47],incom:[15,35,42],increas:[32,35,41],incred:[30,42],independ:7,indic:[21,27,30,42,46],infeas:[24,47],infin:35,infinit:15,info:[3,4,10,12,17,27,30,35],inform:[0,2,3,4,5,6,10,15,25,27,28,29,30,32,34,35,37,38,42,44],infrastructur:44,ing:[17,24,47],init:[21,35,42],init_serv:21,initi:[27,28,30,37,38,42,44],input:42,insecur:10,insensit:42,insert:[10,43],insid:[28,35],instal:[0,4,5,28,29,31,35],instanc:[10,32],instantli:21,instead:[1,4,5,10,15,16,17,22,24,30,35,41,42,44,45,47,48],instruct:[7,30,41],integ:[10,42],integr:2,intend:[3,33,42],intens:21,intent:[24,47],intention:28,interact:[3,4,6,16,17,35,42,44,47],intercept:42,interchang:[31,37],interest:4,interfac:[2,24,42,47],intern:[21,32,35,42,46],internet:[0,4,42,44],interpret:[3,37,42,43],interv:42,introduc:[4,30,42],invalid:42,invers:43,invit:[0,2,4,10,17,24,34,36,38,47],invite:42,invok:42,involv:29,invt:42,ipaddress:42,iptabl:16,ipv4:[30,35,37],ipv4address:42,ipv6:[2,30,35,36,42],ipv6address:42,irc:[0,4,6,15,16,21,24,28,29,30,32,33,34,35,36,37,38,39,42,43,45,46,48],ircawai:42,ircd:[17,21,42],ircii:[23,42],ircnet:[4,10,17,21],ircop:[10,17],ircu2:17,ircv3:[2,32,36,42,45],isn:[6,15,21,22,25,30,33,42],isol:34,isop:10,isoptest:10,isp:30,isset:32,issu:[4,5,16,24,30,32,35,40,42,44,46,47],issuer:44,issupport:32,istn:10,isupport:32,ital:42,item:42,its:[1,2,4,7,10,15,16,17,19,21,22,24,28,30,32,34,35,36,40,42,45,47],itself:[15,27,28,29,35,42],itsself:[],j9irk4vs28b0obz9easys4w2ystji3u:47,jan:[42,44],janitor:[15,48],januari:[1,8,9,12,18,20,23,25,42],jkp:30,job:44,john:1,join:[2,6,10,12,17,18,24,28,30,31,33,35,36,38,39,42,46,47,48],jpk:35,jul:7,juli:0,jump:[21,34,44],jun:45,june:16,jupe:42,just:[0,3,4,5,6,14,15,17,19,22,27,29,30,32,34,35,39,41,42,45,46,47],karma:40,keep:[2,4,10,15,21,23,30,35,47],kei:[2,3,10,17,24,28,29,35,41,46,47],kept:[33,35],keyout:[29,44],keypair:[29,31],kick:[10,17,21,32,35,42,45,48],kicker:42,kiddi:35,kill:[30,42],killer:5,kilobyt:[15,35],kind:42,know:[17,18,21,24,27,28,32,33,34,35,42,45,47],knowledg:0,known:[21,29,35,41,42],kreativrauschen:[6,20],kvirc:44,lag:[35,39],lame:[10,17,34,35,42],lamer:35,lameshar:34,lamest:[10,30,34,35,43],lamestbot:[3,10,18,21,30,34,35,42,43],lang:45,languag:[28,35,36,45],larg:[2,15,17,21,35],larger:[28,41],last:[0,5,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,30,33,34,35,37,38,39,42,43,44,45,46,48],lastli:42,laston:42,late:42,later:[1,3,6,9,18,19,25,28,30,35,42,44],latest:[4,5,30],launch:30,layer:[29,31],lazi:17,leaf:[34,35,41,44],learn:[17,29,30,35,36,42],least:[4,17,27,30,33,35],leav:[10,21,30,35,39,42,47],left:[17,42],legal:[2,4],len:21,length:[17,21,27,41,42,44],less:[13,39,42],let:[4,6,10,14,18,27,28,30,34,35,36,42],letter:[4,35,48],level:[11,16,29,32,35,48],libera:[2,4,5,21,27,28,29,30],librari:[28,41,44],libssl:[4,30,31],licens:[0,1,4],lieu:42,life:[18,30],light:47,like:[0,1,4,6,9,10,13,15,17,19,27,28,29,30,35,36,37,39,40,41,42,44,46,47,48],limbo:35,limit:[2,6,10,15,17,21,34,37],lindex:42,line:[2,3,5,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,32,34,35,36,41,42,44,45,46,47],link:[0,2,3,4,5,6,7,15,22,23,27,35,36,38,41,44,45],linux:37,list:[0,4,6,10,14,15,19,21,22,24,25,27,28,29,30,31,32,34,35,36,38,39,44,46,47],listen:[29,30,34,35,37,44],liter:[27,42],littl:[3,5,15,24,30,34,45],llama:34,llamabot:[30,35],load:[6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,32,34,35,41,42,47],loadmodul:[8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,35,41,47],lobster:41,local:[15,28,30,35,39,40,42,44],localfil:6,locat:[2,4,23,28,29,31,35,44],log:[0,2,4,10,19,24,27,30,32,40,41,42,47],logfil:[25,27,30,35,45],logfilenam:35,logflag:35,logic:42,login:[30,35,41,46],logmod:27,logsiz:35,longer:[3,5,15,17,19,27,30,31,42],look:[0,4,5,6,10,20,25,26,28,29,31,32,35,36,41,42,44,47],lookup:[14,35,37,42],lose:10,lost:42,lot:[5,17,28,30,32],low:[21,23],lower:21,lowercas:21,lsa:15,luck:[30,47],lurk:2,mac:37,machin:[3,16,30,35],macro:27,made:[0,1,3,4,5,10,22,40,42,44,47],magic:28,mai:[1,4,5,10,11,15,16,17,23,28,30,34,35,37,38,42,45,46,47],main:[7,28,30,31,32,39],maintain:[2,16,30,32,45,46],mainten:48,major:[27,30,42],make:[0,2,3,4,5,6,7,10,13,15,19,21,22,24,27,28,29,30,31,35,37,38,40,42,44,45,47],makefil:[3,27],making_modulenam:27,man:35,manag:[2,4,6,15,24,31,47],mandatori:42,mani:[4,5,10,14,15,17,21,27,29,30,31,34,35,42],manipul:[2,35],manpag:35,manual:[4,29,34,35,37,42,44,46],mar:37,march:[33,43,48],mark:[15,36,42,48],mask:[15,21,28,35,46],masquerad:35,master:[15,29,30,33,34,35,42,43,48],match:[1,2,10,15,17,27,28,33,35,41,44,46],math:42,matter:[1,14,28,29],max:[15,17,18,21,23,35],maxdepth:[],maxim:35,maximum:[10,14,15,17,18,21,23,35,41,42,44],maxsend:14,mayb:[28,35],mco:[35,42],mcobx:30,md5:[6,9],mean:[15,17,21,28,29,32,33,34,35,36,37,41,42,44,46],meaning:[24,42,47],meaningless:48,measur:21,mechan:29,meet:44,mem:42,member:[10,27,32],memberlist:42,memori:[27,42],mention:27,meridian:35,messag:[4,10,21,27,28,30,32,35,36,38,39,41,43,45,46],method:[4,6,9,16,17,19,24,28,29,30,31,41,45,47],midnight:35,might:[4,17,23,27,35,42,44],migrat:5,militari:35,milk:48,min:35,miniatur:39,minimum:[0,10,42,46],minor:[27,42],minu:10,minut:[4,10,17,23,27,29,30,33,35],mirc:[21,42],misc:[35,42],miscellan:2,misnom:42,miss:[4,30,32,42],mix:[10,17],mkcoblx:35,mkdir:6,mnnrrpp:42,mnot:22,mnt:30,moc:42,mod:[3,6,7,20,24,27,35,42,46],mode:[4,5,10,13,17,21,24,27,29,32,33,35,36,38,47],mode_proc:42,mode_proc_fix:42,modechang:42,moder:[24,29,46,47],modern:[16,41],modes_per_line_max:17,modif:[5,30,42],modifi:[2,6,14,17,28,32,35,42],modul:[0,2,4,30,32,34,36,41,47],modular:2,module_clos:[],module_depend:27,module_entri:27,module_expmem:[],module_find:27,module_load:27,module_nam:27,module_regist:27,module_renam:27,module_report:[],module_start:[],module_t:[],module_undepend:27,module_unload:27,modulenam:[7,27],moment:[17,30,31],monitor:[33,36,38],month:[35,42],moo:42,more:[3,4,5,6,13,15,17,20,27,28,29,30,31,34,35,36,38,40,41,42,44],moreov:35,most:[0,2,4,5,16,17,21,27,28,29,30,31,35,36,39,42,46,47],mostli:[24,42,47],motd:[35,43],mount:23,move:[3,4,15,21,30,42,47],mpj:42,mrlame:[30,35],mrslame:[30,35],msg:[4,6,17,20,21,29,30,35,36,39,41,46],msgid:46,msgm:[21,42],much:[2,3,24,27,30,39,42],multi:30,multipl:[0,2,4,16,28,30,34,35,36,42,46],must:[1,2,3,4,10,14,16,17,21,23,27,29,30,31,32,34,35,41,42,44,46],mydir:15,myownevent123:42,myproc:42,mytag:42,myvar:45,myword:17,name:[3,4,6,8,15,21,27,28,29,30,31,32,35,46],nano:30,nat:[16,35,37],natur:46,nearli:7,necessari:[10,31],necessarili:42,need:[0,3,4,10,14,16,17,21,27,28,29,30,31,32,34,35,37,41,42,44,46,47,48],needal:42,needop:42,neg:[14,35,42],negcach:14,negoti:[42,44],net:[1,3,17,21,24,30,32,38],netbsd:37,nethack:48,netsplit:[16,17,35,36,42],network:[0,2,4,17,21,35,42,43],never:[4,5,10,35,42],new_module_nam:27,newer:[5,30],newhandl:42,newidx:42,newnick:42,newus:[30,35],next:[5,10,15,21,27,28,30,31,35,42],nfree:27,nice:27,nicebot:30,nick:[10,17,21,25,28,29,30,35,48],nicknam:[6,21,28,29,30,32,35,43,45,46,48],nickserv:[2,44],nist256p:29,nkch:42,nmalloc:27,no_irc:[6,21],nobodi:[15,28],node:[29,44],nodesynch:10,noemail:4,non:[3,10,14,16,17,21,27,29,33,34,42,44,47],none:[8,9,10,12,14,18,19,20,21,23,26,42],noout:29,noqueu:42,nor:16,normal:[0,4,6,13,14,15,16,21,27,28,31,35,42,44,45,46,47],notabl:47,notat:35,notc:42,notcproc:42,note:[2,3,6,7,9,10,14,17,19,21,22,27,29,30,32,34,35,41,44,46,47],notebox:42,notefil:[18,42],notepad:30,noth:[27,35,42,47],notic:[2,13,15,28,34,35,42,47],notif:42,notifi:[18,21,30,35,36,38,42],nots:1,nov:34,novemb:[22,38],novic:[0,4],now:[3,5,15,16,17,28,29,30,31,34,35,37,41,42,46,48],ntik:42,number:[2,10,15,17,18,19,21,23,24,27,30,31,34,35,41,42,44,46,47,48],numer:[29,31,42],nxdomain:14,oauth:47,obtain:[2,31,44],obvious:[33,42],occur:[17,28,42],occurr:27,octal:35,octob:[10,19,21,35],off:[10,16,17,21,30,34,35,39,42],offer:[30,31,32,46,47],offici:[2,4],offlin:42,offset:35,often:[4,6,14,29,35,46],oident:16,oidentd:16,okai:35,old:[6,19,21,30],old_module_nam:27,older:[4,37,42],oldest:[2,42],oldhandl:42,omin:28,omit:[42,44],onc:[4,10,15,17,19,21,28,29,30,40,42],one:[4,10,15,16,17,21,27,28,29,30,31,33,34,35,36,39,40,41,42,44,45],ones:[14,22,34,37,42],onjoin:18,onli:[3,4,5,6,7,10,15,16,17,18,20,21,22,25,26,28,29,30,32,33,34,35,37,39,41,42,43,44,45,46,48],onlin:[6,15,18,29,32],opchar:17,open:[16,29,35,39,40,42,44],openbsd:37,openssl:[2,3,4,19,29,30,31,35,44],oper:[13,21,28,35,37,42,43],opped:[10,42,48],opping:[0,4],oppos:42,ops:[10,32,42,48],optim:[6,21],optino:38,option:[1,3,4,7,10,15,16,19,21,29,30,35,44,47],order:[4,14,28,32,35,41,42,44,46],ordinari:[42,44],org:[2,4,5,6,25,28,30,31,34,35,42],origin:[1,21,30,40,42],oss:16,other:[0,1,4,6,9,10,14,15,16,17,18,19,21,22,27,28,29,30,31,33,34,35,36,37,38,39,41,42,43,44,45,46,47,48],otherdir:3,otherwis:[3,4,12,15,28,32,33,34,35,37,41,42,44,46],our:[30,34,42],ousterhout:1,out:[0,3,4,23,25,28,29,30,34,35,39,41,42,44],outform:29,outgo:[35,42,45],output:[2,3,27,29,31,41,43,45,46],outsid:[19,31,35],over:[15,21,24,27,28,30,35,37,42,44,45,47],overal:32,overhead:7,overrid:[22,37,44],overridden:17,overwrit:[16,30,42],overwritten:[5,35,42],own:[1,7,15,16,21,22,28,29,30,31,38,42,44,45,47],owner:[4,10,30,35,39,42,48],p_tcl_hash_list:27,packag:[1,3,4,30,31],pad:42,page:[30,40],pai:[5,32,42],pain:[23,30],pair:[29,31,32,42,44,46],paragraph:3,paramet:42,paranoid:[22,35],pars:42,part:[0,4,21,24,28,35,36,42,44,45,47],parti:[2,5,12,30,34,35,36,42,44,48],particular:[5,29,35],partproc:42,partylin:[2,4,6,12,30,31,32,34,35,37,41,42,44,45,46,47,48],pass:[28,29,30,32,37,39,41,46],passiv:34,passthru:35,password:[5,6,9,17,19,21,22,29,30,34,35,36,39,41,44,47],past:[1,4,27,35],patch:[2,37,42],path:[2,3,15,16,30,31,42,44],pathnam:42,patient:15,pbk:41,pbkdf2:[2,5,6,41],peer:[21,35,44],pem:[29,35],penalti:21,pend:[6,10],peopl:[4,10,15,16,17,18,21,22,28,30,35,36,39,42,43,48],per:[17,42,46],percent:43,perfect:32,perform:[0,3,4,5,10,30,42,48],perhap:30,period:[6,14,30,42],perm:35,perman:[10,33,35,42],permiss:[4,35,41],permit:42,perorm:2,persist:30,person:[4,28,30,35,42],phew:30,phrase:42,physic:34,pick:42,pictur:5,pid:[30,35,42],pidfil:35,piec:[3,28],ping:13,pipe:34,pl1:42,place:[1,3,5,7,10,15,17,28,30,33,35,42,44,47],plain:[29,35,44],plaintext:[29,42,44],plan:[4,28,42],platform:[0,4,24,42,47],pleas:[4,5,6,7,9,10,16,19,21,31,35,38,42],plu:[10,21,35,42,44],pmsg:28,point:[3,6,21,26,30,34,35,42],pointer:[1,3,4,36,43],popul:46,popular:[0,4,5,30,35],port:[1,5,14,16,21,22,29,30,31,34,35,37,44],portabl:42,portion:[3,7,10,42],portrang:35,posit:[27,35],posix:42,possibl:[3,10,13,15,21,29,31,35,37,38,39,42,44,46],potenti:[5,16,28,42,46],pour:40,power:[4,36],practic:[41,42],pre:[42,44],preced:[30,42,44],prefer:[35,37,44],prefix:[5,17,21,28,31,35,39,44,46,47],preinit:42,prematur:30,prepar:34,prepend:35,prerehash:42,prerequisit:2,prerestart:42,prerout:16,present:[2,6,28,29,32,37,42,46,47],preserv:30,pretend:47,pretendnet:31,pretti:[0,39],preval:29,prevent:[0,4,10,17,18,24,30,34,37,42,47],previou:[1,3,4,5,19,30,42,47],previous:[5,30,42],primari:[21,35],prime256v1:29,prime:35,printf:27,prior:[3,29,30,32,41,44],prioriti:42,privat:[18,22,28,29,30,31,35,39,42,44],privatekei:[29,31,35,44],privileg:[0,4,16,48],privmsg:[10,28,29,42],probabl:[4,21,29,30,31,42],problem:[30,35,37],proc:[21,27,28,46],proce:42,procedur:[2,22,32,46,48],process:[0,3,4,5,11,15,16,23,29,30,34,41,42,44],procnam:[28,42,46],produc:[35,42],program:[0,2,4,16,29,30],progress:15,prohibit:35,project:[2,40,47],prompt:[3,4,32],promptli:30,proper:[3,37,42],properli:[5,30,31,34,35],protect:[0,2,3,4,10,19,21,29,30,33,35,41,42,44,48],protectfriend:10,protecthalfop:10,protectop:10,protocol:[31,35,38,42,44],prove:30,provid:[0,2,4,5,6,7,8,10,11,12,13,14,15,16,17,18,20,21,22,23,24,27,29,30,35,37,38,40,42,44,46,47],pseudo:42,pub:[4,5,21,29,32,42],pubkei:29,publicli:25,publish:35,pubm:[21,42],pull:[4,40,41],punish:[10,42,48],purpos:[0,1,6,25,26,34,35,42],push:[40,42],put:[1,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,30,35,42,44],putlog:[21,27,28],putquick:21,putserv:[10,28,29],putti:29,pwd:[6,30],quakenet:[4,21],qualifi:35,quann:[6,20],queri:[14,16,32,37],question:[4,29],queu:[15,21,42],queue:[21,27],quick:[2,27,30,35],quicker:30,quickli:[2,35],quiet:[21,35,48],quit:[4,6,21,30,35,42],quot:[42,46],quota:35,raid:[24,47],rais:[10,21],ram:35,rand_max:42,random:[10,21,34,42],rang:[30,35],rate:21,rather:[5,42,44],raw:[32,35,44],rawt:42,rcvd:42,reach:[17,21,35],react:[28,32],read:[0,2,3,4,6,7,16,27,28,29,30,31,35,42,43,47],readabl:42,readm:[2,3],readonli:27,real:[21,27,42],realli:[28,30,35,45],realnam:[21,42],reason:[4,27,29,30,34,35],reboot:[16,29],receiv:[14,15,21,23,29,34,42,46],recent:[4,30,42,44],recev:[],recipi:42,recogn:[17,21,29,48],recom:[],recommend:[4,5,10,23,27,30,41,42,45,46],recompil:[17,30],reconnect:[22,42],record:[2,22,27,32,36,48],redirect:16,reduc:[27,46],refer:[27,28,31,35,42],refin:28,reflect:[5,42],refresh:[42,46],regardless:42,regist:[2,10,29],regular:[10,42,44],regularli:36,rehash:[7,27,28,35],reiniti:42,reject:[21,34,35],rejn:42,rejoin:[30,42],rel:[14,27,30,42],relai:[0,4,34,35],relat:[1,6,10,28,37,42],releas:[0,1,30,41,42],relev:[4,27,30],reli:42,reliabl:[32,42,46],relink:34,relinquish:42,rem_builtin:27,rem_tcl_command:27,rem_tcl_int:27,rem_tcl_str:27,remain:[10,33,42],remaind:[15,46],rememb:[10,28,29,30],remind:35,remot:[15,34,35,42,43],remotebotnam:42,remov:[5,10,15,19,27,29,30,33,36,37,41,45,46,47],renam:[2,15,27,30,35,42],render:[5,24,47],repeat:[4,32,42],replac:[10,21,27,29,35,42,43,47],repli:[6,13,14,16,17,32,35,42],replic:[46,47],repo:40,report:[6,15,25,27,30,45],repositori:[4,30],repres:[42,46],req:[29,35,44],request:[0,4,5,7,10,13,15,17,21,30,32,33,35,37,38,40,42,44,45,47],requir:[2,4,5,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,29,30,35,41,44,46],reread:42,resend:[14,42],reserv:[30,35,39],reset:42,resolut:35,resolv:[6,14,35,42],resourc:27,respect:[14,37,42,43],respond:[10,30,42],respons:[21,32,42],rest:[3,27,34,35,41,42,46],restart:[2,3,4,5,7,28,30,35],restrict:[1,15,16,21,35,42,43,47],result:[21,32,33,35,37,42],resum:42,resync:22,retain:42,retri:23,retriev:[6,18],retrydelai:14,reus:[5,42],reveng:10,revengebot:10,revers:[41,42],revert:42,review:[29,31],revis:[0,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,33,34,35,37,38,39,42,43,44,45,46,48],revok:[21,35],rfc1459:[38,42],rfc2812:38,rfc:[17,21,24,42,47],rfc_compliant:42,rich:[0,4,30],right:[6,15,16,26,28,30,42],rijndael:19,risk:[1,21],rizon:21,rmdir:6,rmst:46,robei:[1,3,4,36,43,48],robot:36,roomsstat:24,roomstat:[24,47],root:[15,16],round:[19,41],rout:[16,42],routin:[17,35,42],rsa:35,rule:30,run:[2,3,4,5,7,10,16,21,27,28,29,30,31,32,34,35,41,43,44,46],s_client:44,safe:[19,29,30,31,41,47],sai:[4,10,15,28,31,34,42],said:[28,34,42],sake:47,salt:[28,41],same:[0,3,4,5,7,10,11,16,17,27,28,30,32,34,35,38,41,42,43,44,45,46],sampl:[10,30,47],sane:21,sanitycheck:35,sasl:[2,30,36,38],save:[5,6,10,11,12,22,34,35,36,41],scan:30,scenario:[31,32,34],schat:[35,44],schedul:42,scheme:1,scope:31,screen:[4,40,43],script:[0,2,3,4,7,10,21,29,30,33,36,37,42,45,46,47,48],scripter:34,sdcc:44,sdebug:3,seamless:41,seamlessli:19,search:[27,29,42],sec:35,second:[4,10,13,14,17,21,23,27,28,35,45],secondli:42,secret:10,section:[5,10,17,21,24,28,30,34,35,42,47],secur:[0,2,4,6,9,19,29,30,34,35,36,41,42],see:[0,2,3,4,5,6,10,15,17,21,24,25,27,28,29,30,31,32,34,35,37,39,40,41,42,43,46],seen:[2,6,10,32,35,42],selecet:42,select:[4,30,35,36,40,42],self:[2,21,31,35,44],send:[4,6,11,15,17,18,21,22,23,27,28,30,32,34,37,42,45,46],sender:42,sens:[0,4],sensit:41,sent:[6,15,17,22,25,29,32,35,38,39,42,44,46,48],separ:[3,7,21,30,34,35,36,37,38,42,45,46],septemb:14,seri:[30,42,44],serv:35,server:[2,5,6,7,10,13,14,15,16,17,19,24,25,27,29,30,35,36,37,38,44,45,46,47],serverlist:42,serverop:10,serverror:21,servic:[6,10,16,24,29,32,42,44,47],servivc:42,session:[4,37,38],set:[0,1,2,3,5,6,10,11,12,13,14,15,16,17,18,19,21,22,23,24,27,28,31,32,33,34,36,38,39,41,43,45,46,47,48],setcap:16,setnam:[36,38],setup:[4,6,7,30,35],seven:[10,42],sever:[0,4,13,27,30,31,38,42,45],sexystuff:28,sha1:44,sha1sum:29,sha256:19,shall:35,share:[0,2,4,6,10,11,23,27,35,36,42],sharebot:[34,35,42],sharefail:23,she:42,shell:[0,3,4,16,29,30,35,42],shorter:10,should:[1,3,4,5,10,12,13,14,15,17,19,21,22,24,27,28,29,30,34,35,37,39,41,42,44,46,47],shouldn:16,show:[4,6,10,15,25,28,34,35,42],shown:[15,30,35],shutdown:42,shutdownreason:42,side:[35,42,44,47],sidenot:31,sighup:42,sigil:42,sigkil:42,sign:[21,29,31,35,42,43,44,47],signal:42,signific:[4,6],significantli:[32,46],signoff:42,sigquit:42,sigterm:42,silent:35,simialar:[],similar:[4,10,29,30,35,39,40,42,45],similarli:46,simpl:[4,27,28,29,30,42],simpli:[4,5,29,30,31,38,42,47],simplifi:42,simul:[35,42],simultan:[15,23,42],sinc:[0,3,5,17,30,34,35,36,37,42,44,45],singl:[16,17,29,42,46],sit:[0,4,10,35,41],site:[6,48],situat:[32,34],six:42,size:[15,23,27,35,42],skim:4,skip:[30,42],slash:[30,39],slave:34,slennox:30,slow:[15,30,35],slower:35,small:[3,23,34,45],smaller:3,smile:3,snapshot:[2,30],snowbot:15,snt:29,sock:[27,35],socket:[16,27,31,42,44],softwar:[0,1,2,4],solut:41,some:[0,4,5,10,11,12,13,14,15,16,17,18,19,21,22,23,27,30,32,33,34,35,36,37,38,42,44,45,47,48],someircnetwork:35,someon:[4,10,17,28,30,31,42,46],someth:[4,28,30,40,42,47],sometim:[4,21,30],somewher:[3,35],song:42,soon:[10,42],sort:[0,4,33],sound:28,sourc:[1,3,4,5,6,7,27,28,31,35,40,42,44,45],space:[0,23,35,38,42],spawn:0,spec:32,special:[34,42],specif:[6,10,14,16,17,19,21,24,30,34,37,38,42,44,46,47,48],specifi:[10,14,15,16,18,21,22,27,29,30,33,35,36,37,41,42,44,46],spectrum:[24,47],spent:[30,42],split:[10,17,37,39,42,43],splt:42,spoiler:47,spoken:42,spoof:16,spread:35,squar:37,squelch:21,src:[3,7,17,27],ssh:30,ssl:[2,3,4,5,21,29,30,31,36,42],sslcert:[3,31,35,44],sslinc:44,ssllib:44,sslport:44,sslsilent:[3,44],sssss:[],stabil:23,stabl:[2,4,30],stack:[17,37,42],stackabl:[],stage:27,stai:42,stall:42,stand:[0,4,30],standard:[14,16,17,23,27,28,38,42,44,47,48],start:[2,3,4,5,6,9,16,19,21,26,28,29,34,35,38,39,41,42,43,46,47],starttl:44,startup:[2,41,42],stat:6,state:[4,42],statement:42,statist:[6,15,25],statu:[0,2,4,10,24,27,31,35,45,46,47],status:32,statuslog:10,stb:21,stdio:27,stdlib:27,stdout:27,stealth:[30,35],step:[2,3,5,27,30,47],stick:33,sticki:[33,42],still:[1,4,5,10,15,22,30,31,32,35,36,42,47],stone:21,stop:[0,10,15,17,27,42,46],stopnethack:[10,48],storag:[6,12,41],store:[5,6,10,12,15,18,24,25,28,30,32,34,41,42,46,47],str_dir:27,str_protect:27,stream:[24,47],street:1,strftime:35,string:[2,17,27,28,29,35,41,46,47],strong:35,strongli:[2,4,30],stuff:[2,4,27,28,30,35,42],style:[33,42],sub:[15,42],subdirectori:[15,42],subject:44,sublist:42,submit:[2,42],subscrib:[46,47],subsequ:42,substitut:[2,35],succeed:42,success:[27,30,42],successfulli:[4,27,42,46],sudo:[16,30],suffic:28,suffici:31,suffix:[7,35],suggest:[5,27],suit:[16,30],suitabl:46,sum:28,summar:21,sun:35,sundai:42,supplant:42,supplementari:32,suppli:35,support:[0,2,3,4,5,6,8,10,11,14,16,17,18,21,22,23,29,30,31,33,35,36,42,45,47],sure:[4,10,27,28,30,31,34,35,42,47],symbol:[31,42],synchron:44,syntax:[5,29,35,44,48],sys:27,system:[2,3,7,14,15,16,27,29,30,35,36,37,42,43,44],tab:27,tabl:[27,38,42],tag:[15,36,38,46],tail:29,take:[3,4,5,6,15,19,21,25,28,30,35,41,42,44],taken:[27,42],takeov:17,talk:[28,31,32,36,39],talli:27,tar:[4,7,30],tarbal:[0,30],target:46,task:[0,2,4,34],tcl:[0,1,2,3,4,6,10,11,21,27,28,30,33,35,36,37,44,45,47],tcl_cmd:27,tcl_int:27,tcl_string:27,tclsh:4,tcltk:4,tcp:[2,16,37],team:[0,1,2,3,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,33,34,35,36,37,38,39,40,41,42,43,44,45,48],technic:47,techniqu:45,tell:[15,28,29,30,31,32,34,35,42,47],telnet:[2,29,30,34,36,37,39,41,42,43,44],temp:42,templat:40,temporari:[10,23,25,33,35],ten:29,term:[2,28,31,42],termin:[4,5,42],test:[28,30,48],text:[4,10,21,27,29,35,43,44,45,46,48],textfil:2,than:[4,10,13,15,17,30,31,35,41,42,44],thank:4,thee:42,thei:[0,3,4,5,7,10,12,13,17,18,21,22,27,28,29,30,31,32,33,34,35,41,42,44,46],them:[0,1,3,4,5,7,10,12,13,14,15,17,18,21,22,23,27,28,29,30,31,34,35,36,37,38,41,42,45,47,48],themselv:[17,30,34,42,45],therebi:[45,47],therefor:[6,17,30,35,42],thi:[0,1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,40,41,42,43,44,45,46,47,48],thing:[3,4,6,24,26,27,28,29,34,35,42,47],think:[40,48],third:[28,34],thorough:[27,29,31,47],those:[1,3,7,11,15,21,27,28,29,30,42,45,46,47],though:[15,21,28,30,42,44],thr:35,three:[21,29,32,33,34,35,42],through:[4,10,15,21,24,28,31,36,37,38,39,42,47,48],throughout:27,thse:[],thu:[16,28,32,37,41,42],tidi:27,ties:42,till:[],time:[0,3,4,10,14,15,16,17,19,22,23,28,29,30,31,32,33,34,35,36,38,39,41,43,44,45,47],timeout:[6,14,21,23,35,46],timestamp:[35,42],timezon:35,tip:[2,42],titl:48,tiwtch:6,tls:[42,44],tmi:46,tmp:[23,42],toctre:[],todai:42,togeth:[0,2,4,21,28,34,35,36,38,42],token:47,told:28,ton:24,too:[15,17,21,23,27,35,42],tool:[3,30],top:[3,4,28,40,42],topc:42,topic:47,total:[10,27,36,42],tout:42,toward:28,trace:21,track:[2,3,15,24,27,29,42,47],tradit:[24,37,45,46,47],tradition:16,traffic:[3,35,45],trail:27,transfer:[2,6,7,11,15,22,30,34,35,37,42,44,48],transit:[19,41,42],transmit:21,transpar:35,transport:31,treat:[42,47],tree:[0,4,30],tri:[27,35,42],trick:[28,45],trigger:[10,21,27,28,32,42,46],troubl:[14,35],troubleshoot:[4,30],truncat:46,trust:[4,35,48],ttl:14,turbo:[23,30],turn:[10,16,21,35,42],tutori:[2,31],twcmd:[24,47],twice:42,twitch:[2,6,36],twith:46,two:[4,6,17,22,28,30,32,33,34,35,41,42,44,45],type:[3,4,6,7,10,12,17,21,24,27,28,29,30,31,32,33,34,35,36,37,38,39,44],typic:[15,24,35,36,39,42,47],typo:42,ubuntu:31,ufl:42,ugli:15,uglyman:15,uhost:[28,42],uid:[35,44],umod:21,unabl:[17,30,34,37,42,47],unaccess:36,unavail:[21,35],unban:[10,35,42],unbind:[17,35,45,46],uncertainti:46,uncom:[29,31,35,41],under:[0,4,30,36,42],underli:42,underlin:[42,43],undernet:[4,17,21,42],understand:[35,42],understood:21,unexpect:42,unhid:6,unimport:35,unintend:46,uniqu:[35,42,46],univers:35,unix:[0,3,15,16,30,36],unknown:42,unld:42,unless:[17,21,28,30,33,35,42],unlik:[3,36],unlimit:34,unlink:[23,35],unload:[27,42],unoffici:37,unpack:0,unreach:34,unrealircd:[17,42],unreli:[24,46,47],unrest:0,unset:42,unshar:[6,48],unstick:33,unsticki:33,unstuck:42,unsur:30,untar:5,until:[7,10,15,33,35,42],unzip:[5,30],updat:[4,5,19,27,30,32,35,36,41,42,46],upgrad:[2,41,44],uplink:42,upload:[15,30,36,42,45],upon:[0,4,46,48],upper:14,uptim:[2,6],url:[35,42],usa:1,usabl:[6,15,35],usag:[2,4,6,27,35,42],use:[0,1,3,4,5,6,7,9,10,12,13,14,15,16,17,19,21,22,23,27,28,29,30,31,33,34,35,37,39,41,42,43,44,45,46,47,48],used:[0,2,4,10,11,13,15,19,21,27,28,29,30,31,33,34,35,36,37,39,41,42,43,44,45,46,47,48],useful:[1,4,10,23,30,34,42,44,45],useless:[5,24,47],user:[0,2,3,4,5,6,7,9,10,11,12,13,16,17,18,19,20,21,22,23,24,27,28,30,31,32,33,35,36,37,39,40,41,43,44,45,46,47],userban:10,userexempt:10,userfil:[0,2,4,5,6,9,10,11,19,22,23,27,29,30,34,35,41,42,45],userflag:17,userhost:46,userinfo1:35,userinfo:[13,42],userinvit:10,userlist:[6,17,20,22],usernam:[16,29,30,35,46,47],usernotic:[24,46],userst:[24,47],uses:[3,6,17,21,23,27,28,29,30,31,33,35,41,42,44,47,48],using:[1,3,4,6,7,9,10,15,16,17,19,21,27,28,29,30,33,34,35,37,41,42,44,45,46,47],usrntc:46,usst:46,usual:[4,29,30,31,33,37,40,41,42,44,47],utc:35,util:3,utim:28,vagu:30,vali:42,valiant:[0,4],valid:[3,10,21,27,34,35,36,42,44],valis0:42,valu:[10,13,14,17,21,24,27,28,35,41,43,44,46,47],vari:[42,48],variabl:[2,5,10,11,12,13,14,15,16,17,18,19,21,22,23,27,28,32,35,37,43,46],variable_nam:27,varieti:[0,4],variou:[1,27,30,33,35,42],verbos:42,veri:[4,6,16,20,21,28,35],verif:[21,35,44],verifi:[21,29,35,44],version:[0,1,2,3,4,5,13,17,25,27,28,37,38,43,44,46],vertic:42,vhost4:[30,35,37],vhost6:[30,35,37],vhost:[30,35,37],via:[2,3,4,6,11,16,17,20,22,27,28,29,30,32,33,34,35,36,37,38,39,41,43,44,46,47],video:42,view:[5,7,19,29,30,36,42,46],viewer:46,vim:30,vip:[46,47],virtual:35,visibl:42,visit:[5,47],vista:37,voic:[0,2,4,10,29,42,48],wai:[1,3,4,16,21,24,27,28,29,30,31,32,33,34,35,39,41,42,44,47],wait:[6,14,15,17,21,23,30,32,35,42],walk:31,wall:42,wallop:[35,42],want:[0,3,4,6,10,12,14,15,17,18,21,23,27,28,29,30,34,35,37,42,44,45],war:0,warm:40,warn:[4,16,28,42],warranti:1,washalfop:48,wasn:42,wasop:[10,17,48],wasoptest:10,watch:[39,46],web:[2,6,24,35,46],webpag:2,websit:30,week:42,weekdai:42,welcom:28,well:[1,24,28,29,30,31,32,35,41,42,44,47],were:[1,16,17,30,33,34,35,37,41,42,47],west:35,wget:30,what:[0,1,2,5,6,10,15,17,21,25,28,29,30,35,38,39,41,42],whatev:[1,3,28,35,36,42,43],when:[3,4,6,7,9,10,12,15,16,17,21,22,27,28,29,30,32,33,35,37,39,41,42,44,46,47],whenev:[21,27,32,34,42,44],where:[4,6,10,14,15,18,21,27,28,29,30,31,32,35,36,41,42,44,46],wherea:42,wherev:37,whether:[35,37,42],whew:28,which:[3,5,6,10,12,14,15,16,21,22,27,28,29,30,32,33,34,35,37,39,41,42,43,44,45,46,48],whichev:33,whisper:[24,46],whitespac:42,who:[10,15,17,21,28,30,32,35,39,42,48],whoi:[29,35],whole:27,whose:[33,42],whox:[36,42],why:[28,30,42],wide:[39,44],width:43,wild:42,wildcard:[10,28,29,42,46],window:[2,29,37],wise:[4,35],wish:[3,5,7,16,17,25,27,30,33,34,35,42,46],within:[6,15,27,30,31,33,35,38,42],without:[0,2,4,5,6,9,10,13,19,27,28,29,30,31,34,35,36,38,41,42,44],wizard:31,won:[6,10,22,27,28,30,33,34,35,42,44,46],woobi:[2,3,6,27],word:[15,17,29,30,42,46,47],work:[3,5,6,10,13,15,19,20,22,27,28,29,30,33,34,35,37,38,40,41,42,44,45,46],workaround:[24,32],world:[0,2,4,31,35],worri:24,worth:3,would:[4,5,13,28,29,30,31,32,34,35,42,43,44,46,47],wouldn:35,write:[1,2,6,7,26,30,35,41,42,47],written:[0,27,30,42,47],wrote:28,wspm:46,wspr:46,wth:[],www:[2,4,6,20],x509:[29,35,44],xfer:[23,48],xtra:42,xvf:30,xxd:29,year:[0,4,30,35,42],yes:[28,31,42],yesterdai:35,yet:[4,21,30,35,42],yoru:29,you:[0,1,3,4,5,6,7,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,39,40,41,42,43,44,45,46,47,48],you_want_to_export:27,your:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,34,35,36,37,39,40,41,42,44,47],yourbot:45,yourbranchnam:40,yourconfig:3,youreggdrop:29,youreggdropconfignameher:29,yourself:[7,29,30,40,41,44],yourusernam:40,yyyymmdd:35,zero:42,zip:30,zomg:[],zxvf:30},titles:["About Eggdrop","Boring legal stuff","Eggdrop, an open source IRC bot","Installing Eggdrop","README","Upgrading Eggdrop","Modules included with Eggdrop","Eggdrop Module Information","Assoc Module","Blowfish Module","Channels Module","Compress Module","Console Module","CTCP Module","DNS Module","Filesys Module","Ident Module","IRC Module","Notes Module","PBKDF2 Module","Seen Module","Server Module","Share Module","Transfer Module","Twitch Module","Uptime Module","Woobie Module","Writing an Eggdrop Module","Writing an Eggdrop Script","Common First Steps","Setting Up Eggdrop","Enabling TLS Security on Eggdrop","Account tracking in Eggdrop","Bans, Invites, and Exempts","Botnet Sharing and Linking","Eggdrop Core Settings","Eggdrop Features","IPv6 support","IRCv3 support","The Party Line","Patching Eggdrop","Encryption/Hashing","Eggdrop Tcl Commands","Textfile Substitutions","TLS support","Advanced Tips","Eggdrop Twitch Tcl Commands","Twitch","Users and Flags"],titleterms:{"default":45,"function":[27,47],"int":42,"new":42,"return":42,"short":30,"static":7,"super":30,Adding:34,DNS:14,TLS:[31,44],The:[30,39],Using:[32,34],about:[0,37,38,44],account2nick:42,account:[32,42],accounttrack:42,add:[29,42],addbot:42,addchanrec:42,addit:[27,31],address:42,addus:42,advanc:[35,45],api:24,arg1:42,arg2:42,arg:[42,46],argn:42,assign:29,assoc:[8,42],authent:[29,44],automat:29,background:41,backup:42,ban:[33,42],banlist:42,banmask:42,base64:42,basic:35,best:32,bind:[42,46],block:42,blowfish:9,boot:42,bore:1,bot:[2,15,34,42],botattr:42,botflag:34,botishalfop:42,botisop:42,botisvoic:42,botlist:42,botnam:42,botnet:[5,31,34,35,44],botnick:42,botonchan:42,botport:42,bottre:34,callev:42,can:[2,7],cancel:15,cap:[38,42],capabl:[32,38],certif:44,chan:[42,46],chanban:42,chandname2nam:42,chanexempt:42,chanflag:42,chang:[5,42],chaninvit:42,chanlist:42,channame2dnam:42,channel:[10,15,29,42,46],chansettyp:42,charact:42,chat4:37,chat6:37,chat:37,chattr:42,check:32,chhandl:42,clear:15,clearqueu:42,cmd:46,command:[4,5,24,42,45,46],comment:42,common:29,commun:31,compil:7,compress:[11,42],compressfil:42,config:[5,15,30,42,45,47],configur:[29,30,31,41],configurearg:42,connect:[31,42],consol:[12,35,42],control:42,core:35,count:42,countus:42,creator:42,crontab:4,ctcp:[13,37],ctime:42,cygwin:3,dcc:[35,42,44],dccbroadcast:42,dccdumpfil:42,dcclist:42,dccputchan:42,dccsend:42,dccsimul:42,dccuse:42,decrypt:42,delchanrec:42,delhost:42,deludef:42,delus:42,desc:[15,42],descript:15,dest:15,destin:42,determin:32,develop:4,die:42,dir:[15,42],directori:[15,35,42],disclaim:47,dname:42,dnslookup:42,docker:4,document:[4,5],download:30,dst:15,dumpfil:42,durat:42,dynam:7,echo:42,edit:[30,47],effort:32,eggdrop:[0,2,3,4,5,6,7,27,28,29,30,31,32,35,36,40,42,46],enabl:[31,32,41,42],encpass:42,encrypt:[41,42],entri:42,erasenot:42,event:42,exampl:34,execut:35,exempt:[33,42],exemptlist:42,exemptmask:42,extend:32,extra:42,featur:36,file:[5,15,30,31,35,42,45,47],filemask:15,filenam:[15,42],filepath:15,fileresend:42,filesend:42,filesi:[15,42],filestat:15,find:2,findus:42,first:29,flag:[15,29,34,42,46,48],flushmod:42,formatstr:42,from:42,ftp:4,gener:31,get:[2,4,15,30,42],getaccount:42,getchan:42,getchanhost:42,getchanidl:42,getchaninfo:42,getchanjoin:42,getchanmod:42,getdccawai:42,getdccidl:42,getdesc:42,getdir:42,getfil:42,getfileq:42,getfilesendtim:42,getflag:42,getlink:42,getown:42,getpwd:42,getudef:42,getus:42,git:4,github:40,global:42,hand2idx:42,hand2nick:42,handl:42,handlen:42,handonchan:42,haschanrec:42,hash:41,help:[2,4],helpfil:42,hide:15,histori:30,host:[29,42],hostmask:42,hostnam:42,how:[2,4,5,7],hybrid:41,ident:16,idx2hand:42,idx:42,ignorelist:42,includ:6,info:42,inform:[7,31],instal:[2,3,7,30,37,44],interfac:41,invit:[33,42],invitelist:42,invitemask:42,ipv6:37,irc:[2,17,31,44,47],ircnick:42,ircv3:38,isawai:42,isban:42,isbansticki:42,isbotnick:42,ischanban:42,ischanexempt:42,ischaninvit:42,ischanjup:42,iscompress:42,isdynam:42,isexempt:42,isexemptsticki:42,ishalfop:42,isidentifi:42,isignor:42,isinvit:42,isinvitesticki:42,isircbot:42,isjup:42,islink:42,ismod:46,isop:42,ispermban:42,ispermexempt:42,isperminvit:42,isset:42,istl:42,isupport:42,isvip:46,isvoic:42,join:[29,32],jump:42,keep:45,kei:[31,42,44],keyword:42,killassoc:42,killban:42,killchanban:42,killchanexempt:42,killchaninvit:42,killdcc:42,killexempt:42,killignor:42,killinvit:42,killtim:42,killutim:42,languag:42,lastbind:42,legal:1,level:42,lifetim:42,limit:[24,42,47],line:[4,39],link:[34,42],list:42,listen:[31,42],listnot:42,loadchannel:42,loadhelp:42,loadmodul:[7,42],localfil:15,locat:30,log:[29,35,45],logfil:42,make:34,manipul:42,mask:42,maskhost:42,masktyp:42,match:42,matchaddr:42,matchattr:42,matchban:42,matchcidr:42,matchexempt:42,matchinvit:42,matchstr:42,md5:42,messag:42,minut:42,miscellan:42,mkdir:[15,42],mode:42,modifi:45,modul:[3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,35,42],modular:45,module_clos:27,module_expmem:27,module_report:27,module_start:27,module_t:27,monitor:42,more:2,msg:42,must:5,myip:42,name:42,need:7,newban:42,newchanban:42,newchanexempt:42,newchaninvit:42,newexempt:42,newignor:42,newinvit:42,newnam:42,nick2hand:42,nick:[42,46],nicknam:[15,42],nickserv:29,note:[18,42],notic:4,notifi:32,numberlist:42,numvers:42,obtain:4,old:42,oldnam:42,onchan:42,onchansplit:42,onelin:42,onlin:42,open:2,optim:15,option:42,output:42,own:[],parti:39,partylin:[15,24,29],pass:42,passwdok:42,password:42,patch:40,path:35,pattern:42,pbkdf2:19,pend:15,permiss:29,port:42,pre:[2,4,31],prefix:42,prepar:31,prerequisit:30,proc:42,procedur:42,protect:31,pushmod:42,putallbot:42,putbot:42,putcmdlog:42,putdcc:42,puthelp:42,putkick:42,putlog:42,putloglev:42,putnow:42,putquick:42,putserv:42,putxferlog:42,pwd:15,queue:42,queuesiz:42,quick:[3,4],quit:15,rand:42,raw:42,read:5,readm:4,reason:42,record:[34,42],refreshchan:42,regist:47,rehash:42,reload:42,reloadhelp:42,remov:42,renam:45,renudef:42,req:42,requir:[3,27,32,42],requisit:[2,4,31],resetban:42,resetchan:42,resetchanidl:42,resetchanjoin:42,resetconsol:42,resetexempt:42,resetinvit:42,restart:[29,42],rfcequal:42,rmdir:[15,42],roomstat:46,sasl:29,save:42,savechannel:42,script:[5,28,32,35,44],second:42,secur:[31,44],seen:20,self:45,sendnot:42,server:[21,31,32,42],serveraddress:42,set:[4,29,30,35,37,42,44],setchan:42,setchaninfo:42,setdccawai:42,setdesc:42,setflag:42,setlink:42,setown:42,setpwd:42,setudef:42,setup:15,setus:42,share:[15,22,34],show:30,snapshot:4,socklist:42,solo:41,some:2,sourc:[2,15,30],src:42,ssl:[35,44],stackabl:42,start:30,starttl:42,startup:[3,4],stat:15,statu:[32,42],step:29,stickban:42,stickexempt:42,stickinvit:42,still:7,storenot:42,str:42,strftime:42,string1:42,string2:42,string:[42,45],strip:42,stripcod:42,stuff:1,submit:40,substitut:43,support:[32,37,38,44],system:4,tag:[32,42],tagmsg:42,target:42,tcl:[5,24,32,41,42,46],tcp:42,telnet:35,term:34,text:42,textfil:43,thing:2,time:42,timer:42,timerid:[],timernam:42,tip:45,tlsstatu:42,topic:42,track:32,traffic:42,transfer:23,twcmd:46,twitch:[24,46,47],twitchmod:46,twitchvip:46,type:[42,46],unam:42,unbind:42,uncompressfil:42,unhid:15,unixtim:42,unlink:42,unloadhelp:42,unloadmodul:42,unshar:15,unstickban:42,unstickexempt:42,unstickinvit:42,upgrad:[4,5],uptim:[25,42],usag:[15,37,38,41,44],use:[],user:[15,29,34,42,48],userlist:42,userport:42,userst:46,utim:42,validchan:42,valididx:42,validus:42,valu:42,variabl:[42,45],version:[30,42],via:[40,42],washalfop:42,wasop:42,web:47,what:[4,7,27,34],where:2,whom:42,whox:32,why:[],window:3,without:7,woobi:26,write:[27,28],you:2,your:45}}) \ No newline at end of file +Search.setIndex({docnames:["about/about","about/legal","index","install/install","install/readme","install/upgrading","modules/included","modules/index","modules/mod/assoc","modules/mod/blowfish","modules/mod/channels","modules/mod/compress","modules/mod/console","modules/mod/ctcp","modules/mod/dns","modules/mod/filesys","modules/mod/ident","modules/mod/irc","modules/mod/notes","modules/mod/pbkdf2","modules/mod/seen","modules/mod/server","modules/mod/share","modules/mod/transfer","modules/mod/twitch","modules/mod/uptime","modules/mod/woobie","modules/writing","tutorials/firstscript","tutorials/firststeps","tutorials/setup","tutorials/tlssetup","using/accounts","using/bans","using/botnet","using/core","using/features","using/ipv6","using/ircv3","using/partyline","using/patch","using/pbkdf2info","using/tcl-commands","using/text-sub","using/tls","using/tricks","using/twitch-tcl-commands","using/twitchinfo","using/users"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,sphinx:55},filenames:["about/about.rst","about/legal.rst","index.rst","install/install.rst","install/readme.rst","install/upgrading.rst","modules/included.rst","modules/index.rst","modules/mod/assoc.rst","modules/mod/blowfish.rst","modules/mod/channels.rst","modules/mod/compress.rst","modules/mod/console.rst","modules/mod/ctcp.rst","modules/mod/dns.rst","modules/mod/filesys.rst","modules/mod/ident.rst","modules/mod/irc.rst","modules/mod/notes.rst","modules/mod/pbkdf2.rst","modules/mod/seen.rst","modules/mod/server.rst","modules/mod/share.rst","modules/mod/transfer.rst","modules/mod/twitch.rst","modules/mod/uptime.rst","modules/mod/woobie.rst","modules/writing.rst","tutorials/firstscript.rst","tutorials/firststeps.rst","tutorials/setup.rst","tutorials/tlssetup.rst","using/accounts.rst","using/bans.rst","using/botnet.rst","using/core.rst","using/features.rst","using/ipv6.rst","using/ircv3.rst","using/partyline.rst","using/patch.rst","using/pbkdf2info.rst","using/tcl-commands.rst","using/text-sub.rst","using/tls.rst","using/tricks.rst","using/twitch-tcl-commands.rst","using/twitchinfo.rst","using/users.rst"],objects:{},objnames:{},objtypes:{},terms:{"04may2000":35,"3rd":5,"5c0":[21,30,35],"break":[15,42],"byte":[17,21,23,27,42],"case":[14,19,21,28,30,32,35,42],"catch":42,"char":[27,35,42],"const":27,"default":[2,3,4,10,11,14,15,17,21,23,29,30,31,32,33,35,41,42,44],"export":45,"final":[0,4,28,29,30,35,41],"function":[0,1,2,4,6,7,19,24,30,34,35,37,41,42,45,46],"import":[27,28,29,30,32,35,39,42],"int":27,"long":[6,10,14,18,21,22,33,35,42,43,46],"new":[4,5,7,19,24,28,29,30,32,35,36,37,38,39,40,41,44,45,47],"null":27,"public":[0,1,4,28,29,31,35,42,44,45,48],"return":[17,27,32,41,46],"short":[2,27,29,37,44],"static":[2,3,10,27,29,42],"super":2,"switch":[5,27,30,32,35,42,44,45],"throw":42,"true":28,"try":[3,4,6,7,20,21,25,27,28,29,30,32,35,46],"var":42,"void":27,"while":[0,4,5,10,16,24,30,32,33,35,39,41,42,47],AND:[19,30,42],ARE:28,Adding:[2,24,47],And:28,CVS:4,DNS:[2,6,42],DOING:28,For:[1,2,3,5,7,15,21,29,30,31,34,35,37,38,39,41,42,44,45,46,47],IPs:[29,31,37],NFS:23,NOT:[5,28,30,32,34,35,42,46],Not:[6,21,29,38],One:[0,4,28,32,42],THE:3,TLS:[2,3,4,5,29,30,35,42],That:[24,28,30,34,42,48],The:[0,1,2,3,4,5,6,10,11,13,14,15,16,19,21,22,23,24,25,27,28,29,31,32,33,34,35,36,38,41,42,44,45,46,47,48],Their:37,Then:[5,29,30,44],There:[1,3,4,10,11,12,13,14,15,16,17,18,19,21,22,23,24,27,28,29,31,32,33,35,37,41,43,44,47,48],These:[5,11,17,27,30,32,33,34,35,37,43,44,46,48],Use:[16,17,19,21,27,30,35,42],Used:42,Useful:42,Using:[2,27,42],WILL:46,With:[0,4,6,15,34,35,41,42,44],YES:7,Yes:[7,29],aaa:[],abcdechannel:42,abil:[2,7,16,31,32,36,42],abl:[3,6,10,15,17,21,30,32,35,39,41,42],abort:[23,30,42,44],about:[2,4,6,24,25,27,28,29,35,42,45,47],abov:[1,4,10,17,19,27,28,29,36,42,43],absolut:[0,31,42,48],abus:[0,2,4],accept:[15,22,24,31,34,35,42,44,47],access:[0,4,16,21,27,28,29,30,36,39,41,42,44,46,47,48],accomplish:3,accord:[1,42,48],accordingli:21,account:[0,2,4,16,18,27,29,30,36,38,40,41,47],accur:[32,42,46],accuraci:32,acknowledg:29,across:[0,4,34,38,40,42,45],act:[16,27,35,36,42,44],action:[28,29,31,35,42],activ:[2,10,16,30,32,33,39,42,44],actual:[0,4,15,27,28,31,35,39,42],acut:[],add:[3,4,5,7,10,16,17,24,27,28,30,31,32,34,35,36,41,47],add_builtin:27,add_hook:27,add_tcl_command:27,add_tcl_int:27,add_tcl_str:27,added:[0,3,4,5,19,22,24,28,30,32,34,35,36,37,38,41,42,44,46],addhost:17,adding:[7,21,27,35,36,38,42],addit:[2,4,5,16,21,30,35,42,44,46],addition:[16,30,32,42],addlang:[35,42],address:[18,22,25,30,34,35,37,44],addus:30,adh:35,adjust:[0,4,17],admin:[35,43],admit:23,advanc:[0,2,4,6,20,28,36],advantag:[5,30,45],advertis:[0,4,42],advis:[3,21,23],affect:[5,10,24,35,36,37,42,47],affet:42,affili:[1,47],after:[3,4,10,16,17,21,27,28,29,32,33,35,42,44,45,47],afterward:[17,35],again:[6,15,25,27,33,34,35,41,42,46],against:[10,15,19,21,28,30,41,42,46],age:42,aggress:34,aka:35,alarm:42,alert:[32,47],algorithm:[19,41],all:[1,5,6,7,10,13,14,15,17,19,21,22,27,28,29,30,31,32,33,34,35,36,37,38,39,41,42,44,45,46,47,48],alloc:[27,42],allow:[0,3,4,5,6,7,10,11,15,16,17,18,19,21,22,23,24,27,28,29,30,32,34,35,36,41,42,44,45,47],alltool:35,almost:[0,4,30,33,48],along:[4,15],alphabet:35,alphanumer:47,alreadi:[10,21,27,28,30,31,32,34,35,41,42,47],also:[0,2,3,4,7,10,11,12,13,14,15,16,17,18,19,21,22,23,27,28,29,30,33,34,35,36,39,41,42,43,44,45,46,47,48],alt:[21,35],alter:[15,36,42,47],altern:[2,4,16,21,30,31,34,35,42,44],although:[17,30,35,42],altnick:[21,30],altogeth:19,alwai:[0,3,4,10,30,32,33,35,42],amount:[6,35],anachron:31,ani:[0,1,3,4,5,7,12,15,16,17,18,21,22,24,27,28,29,30,33,35,36,39,41,42,44,46,47,48],annoi:28,announc:32,anonym:35,anoth:[0,10,15,17,18,21,22,27,30,34,35,42,43,46],another:5,ansi:42,answer:[0,7,13,16,21,28],any_other_funct:27,anymor:[6,9,19,35],anyon:[10,33,42],anyth:[0,4,15,28,29,30,34,35,39,42,46],anywai:35,anywher:[39,42],aol:[28,41],aop:10,apart:[27,35],api:6,apostroph:39,appear:[29,30,34,35,42,46],append:[27,42],appli:[30,33,35,41,48],applic:[1,35,42],appreci:31,appropri:[3,5,30,35,38,40,41],april:[24,46],apt:[30,31],arbitrari:42,arbitrarili:46,archiv:4,area:[6,15,35,42,45,48],aren:[30,35,42,45,46],arg:27,argument:[15,17,28,29,37,42,46],around:[0,4,24,31,37,42,47],arriv:42,ascii:42,ask:[4,17,29,30,39,42,44],assign:[34,35,42],assist:[2,30,32,44],assoc:[2,6],associ:[24,32,42,47],assum:[21,28,30,31,32,33,35,42],assumpt:38,assur:46,asynchron:[6,14,42],attach:[32,42,46],attack:[10,19,41],attempt:[4,5,10,16,17,21,24,31,32,33,34,35,42,44,47],attent:[5,21,32,42],attribut:[33,34,42,48],auch:27,aug:42,august:17,auth:[35,44],authent:[2,32,41,42,47],author:[28,31,35,44],auto:[2,3,34,48],autobotchk:[3,4,29],autoconf:3,autoconfigur:3,autodetect:44,autohalfop:10,autom:[0,2,4],automat:[2,3,4,5,12,16,21,30,32,33,34,35,36,37,41,42,44,47,48],autoop:10,autosav:12,autovoic:[10,48],avail:[4,10,15,19,25,27,29,30,31,35,36,37,39,42,47],avoid:[6,14,29],awai:[36,38,42],awar:42,awesom:28,b33f:30,baa:42,back:[21,28,30,35,37,40,41,42,45],background:[2,4,28],backslash:30,backup:[5,27],backward:[5,38],bad:[10,42,48],badg:48,badgui:46,ban:[0,2,4,10,17,24,34,35,36,47,48],bandwidth:[6,11],banner:[35,43],bar:42,barr:35,base64:29,base:[4,30,32,35,41,42],basi:30,basic:[2,4,6,7,20,28,30],bask:40,bbb:[],bcst:42,bear:1,becaus:[0,4,16,21,27,28,35,42,45,46,47],becom:[29,30,35,42],been:[0,1,4,5,15,17,21,27,33,35,36,42,46],beerbot:32,befor:[0,4,10,14,16,17,18,21,22,23,27,29,30,32,34,35,42,47],began:38,begin:[16,28,37,42],behalf:42,behav:42,behavior:[13,17,33,35,37,42],behind:35,being:[0,4,10,15,17,21,31,32,36,37,42,46],beldin:34,bell:42,belong:35,below:[10,15,16,22,24,27,28,30,35,41,42,46],best:[2,3,6,16,30,34,42,46],better:[3,4,6,20,29,30,35],between:[3,6,10,15,18,21,22,31,32,34,35,37,42],beverag:41,big:[5,23,42,45],binari:[3,31],bind:[2,16,17,21,24,27,28,32,35,45,47],birthdai:35,bit:[3,15,24,28,30,31,35,42,44,47],bitch:10,bitchx:42,blank:42,bless:1,blindli:17,bloat:7,block:[23,24,27,30,43,47],blowfish:[1,2,5,6,19,27,35,41,42],bodi:28,bogu:35,bold:[4,42,43,48],boldfac:42,boot:[4,35],bore:[2,4],boston:1,bot:[0,1,3,4,5,6,7,10,12,13,14,16,17,18,19,20,21,22,23,25,27,28,29,30,31,33,35,36,37,38,39,41,43,44,45,46,47,48],bota:34,botaddr:42,botaddress:42,botattr:34,botb:34,botc:34,botchk:[4,29,30],botdir:30,botfl:42,botflag:[2,22],both:[0,4,10,21,23,31,32,34,37,41,42,44],botnam:[29,34],botnet:[0,2,3,4,6,8,10,12,15,21,25,30,36,37,39,41,42,45,48],botnetcentr:43,botnetnick:42,botnetop:10,botnick:[21,28,29,30,35],bottom:28,bottre:2,bounc:17,bound:[16,35,42],boundari:14,box:[30,35],brace:10,bracket:37,branch:[4,40],breach:42,brief:30,broadcast:[24,39,42,46,47],broken:[15,28,35,42],brows:15,brute:19,buf:17,buffer:22,bug:[0,3,4,28,30,40],build:42,built:[2,16,42,45],builtin:[16,42],busi:28,button:[40,47],bypass:42,bywho:42,cach:[14,42],cafil:[35,44],calcul:21,call:[0,3,4,27,28,29,34,35,42,46],callback:32,can:[0,3,4,5,6,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],cancel:[6,42],cannot:[0,27,30,32,41,42,48],cap:[2,27,32,36,47],cap_net_bind_servic:16,capabl:[2,35,36,42,45,47],capac:47,capath:[35,44],capit:[4,48],caption:[],captur:[30,42,45],care:[35,42,47],carefulli:[30,42],carelessli:5,categori:42,caught:42,caus:[16,30,34,42,45],caution:42,cbc:42,ccht:46,center:43,central:[15,35],cerfif:[],cert:[29,35,44],certain:[33,35,36,37,42,43,46,48],certainli:[24,30,47],certif:[2,3,21,29,31,35,42],certifict:44,cet:35,chaddr:[5,34],chain:[35,44],challeng:[28,29],chan:[5,10,17,28,29,30,45],chanc:30,chanfil:[10,30,45],chang:[1,2,6,9,10,15,17,19,21,22,24,28,30,31,34,35,36,38,39,40,44,46,47],chaninfo:[29,34],chanmod:[10,29],channel:[0,2,4,5,6,8,12,17,20,21,22,24,27,28,30,32,33,34,35,36,39,43,45,47,48],channelflag:42,chanrec:[17,42],chanserv:10,chanset:[10,29,34],charact:[2,10,15,21,30,34,35,37,41],chase:[0,4],chat4:2,chat6:2,chat:[0,2,4,6,13,21,29,30,34,35,36,39,42,44,46,47],chatter:35,chattr:[29,48],check:[2,4,5,10,21,27,28,29,31,35,41,42,44,46],checkout:[30,40],chfinger:35,chghost:[36,38],chjn:42,chmod:[3,35],chof:42,choic:[1,21,28],chon:42,choos:[3,7,29,30,35,36,47],chpass:41,chpt:42,chri:1,chunk:21,cidr:[35,42],cipher:[35,42,44],claim:[24,47],clarifi:33,clean:15,clear:[4,6,40,42,44,46,47],clearchat:[24,46],clearmsg:[24,46],cleartext:42,clemson:48,click:[40,47],client:[15,16,21,24,29,30,32,35,38,42,44,47],cloak:29,clone:[2,4,10,30],close:[27,42],cmd:[35,42],cmd_t:27,cmsg:46,code:[1,2,3,4,7,27,28,42],coder:[],col:43,cold:[40,41],colon:[35,37],color:[4,42],column:43,com:[2,4,5,6,20,21,28,29,30,34,35,41,42,44],combin:[36,42],combo:[],come:[4,6,17,21,29,30,40,42],comfort:30,comma:[35,39,42],commadlin:30,command:[2,3,6,10,12,15,16,17,20,21,27,28,29,30,31,32,33,34,35,36,37,39,41,44,47,48],commandlin:30,comment:[15,17,25,28,30,35,41],commerci:30,common:[2,21,30,31,34,35,38,44,48],commonli:[29,31,35,42],commun:[2,27,34,39,40,42],compat:[3,5,38,42,46,47],compil:[0,2,3,4,27,30,31,35,37,42,44],complet:[3,4,10,15,22,30,36,42,44,48],compliant:[17,21,42],compon:42,comprehens:46,compress:[2,6,29],compris:38,concurr:[35,41],conf:[3,7,16,29,30,38,42,44],config:[2,3,4,6,7,10,11,12,13,14,16,17,18,19,21,22,23,24,25,27,28,29,31,32,33,34,35,37,41,43,44],configfil:42,configur:[2,3,4,5,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,35,37,40,42,44],confirm:[40,42],conflict:16,confus:[29,42],connect:[2,4,5,6,14,15,16,21,24,27,29,30,34,35,37,39,44,47,48],connet:[],consequ:46,consid:[4,30,32,33,35,39,42],consider:41,consist:[34,36,39,42],consol:[2,4,6,10,27,36,39],constantli:27,constitut:[10,21,35],consult:[29,37,38,44],contact:[28,35],contain:[1,3,4,5,28,30,32,34,35,37,42,44,46],content:[41,42,46],contest:6,context:27,continu:[30,42],contribut:40,control:[0,2,4,17,21,28,29,34,35,36,44,47,48],conv_form:29,conveni:35,convers:[27,39,44],convert:42,cooldud:30,coordin:35,copi:[1,2,5,7,15,23,27,30,42],copyright:[0,1,3,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,33,34,35,36,37,38,39,40,41,42,43,44,45,48],core:[2,3,6,7,17,18,21,27,28,42,45],correct:[3,31,35,41],correctli:[3,42],correspond:[10,29,33,42],cos:10,could:[1,21,28,34,35,37,40,41,42,44,47],couldn:42,count:21,counterpart:42,coupl:42,cours:[3,28,34,35,42],cover:[32,33,34],cpu:[21,35,42],crappi:42,crash:[3,4,42],creat:[0,3,4,15,16,22,27,28,29,30,33,35,40,41,42,44,45,47],creation:[29,32],credit:[28,42],cron:42,crontab:[3,4,42],cross:30,crotab:[],crt:[29,35,44],crypto:41,cryptograph:[19,41,42],crytopgraphi:41,ctcp:[2,6,10,21,29,30,35,42,44],ctcr:42,ctrl:42,curl:30,current:[2,4,6,7,9,15,17,18,19,24,27,29,30,32,35,36,39,42,43,44,46],custom:[16,21,28,29,32,36,42,44],cut:29,cycl:[10,21,35],cygwin:[2,37],daemon:[16,35],dai:[18,23,35,42,45],daili:[30,42],dalnet:[4,17,21],danc:42,danger:42,danish:35,data:[4,10,22,27,31,41,42],databas:[15,42],date:[1,4,30,32,35,42],db8:[21,30,35],dcc:[0,2,4,6,15,20,21,23,27,29,30,34,36,37,39,41,45],dead:30,deal:[35,42,48],dealloc:27,deauthent:32,debian:[30,31],debug:[3,25,27,28,35,42,44,46],dec:[15,42],decemb:[0,26,36,39],decent:27,decid:[38,41],decis:47,declar:[28,42],decreas:35,defens:28,defin:[4,6,10,11,13,17,21,27,28,30,32,33,34,35,38,42,48],definit:[28,30,31,41],degrad:47,dehalfop:[10,42,48],del_hook:27,delai:[10,15,17,28],delet:[30,42,45],deliber:44,delimit:42,deliv:42,demand:[0,4],demonstr:[6,26,42],denot:[31,42],deop:[10,42,48],depend:[27,32,33,40,42,44,48],deprec:[5,31,42],deprici:21,depth:[35,44],der:29,deriv:41,desc:[6,27],describ:[27,28,30,31,34,35],descript:[6,27,28,29,35,42,46,48],descriptivebranchnam:40,deserv:28,design:[0,2,4,19,38,46],desir:[7,27,29,30,41],despit:31,dest:[3,6,30,31,35,42,44],destin:[16,27],destroi:[0,4],detail:[3,4,6,27,30,32,42,44,46],detect:[7,21,31,37,42,44],determin:[2,3,16,27,29,30,34,37,42,44],dev:[4,30,31],devel:3,develop:[0,1,2,3,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,30,31,33,34,35,36,37,38,39,40,41,42,43,44,45,47,48],devleop:[],dict:[42,46],dictionari:42,did:[1,29,41],didn:[28,30,42],die:[27,29,30],died:21,differ:[1,3,4,5,10,15,21,28,31,32,35,41,42,45,46],differenti:42,diffutil:3,digest:[19,42],digit:[35,44],dinner:41,dir:[6,29],direct:[7,31,34,40,42],directli:[5,6,10,16,22,30,42],directori:[2,3,4,6,7,23,27,29,30,31,36,40,44,45],disabl:[10,17,21,29,35,37,42,44],disc:42,discard:[22,42],disclaim:[2,42],disconnect:[21,22,35,42],discontinu:47,discourag:17,discuss:[4,40],disk:[0,23,30,35,36,42],displai:[12,15,17,21,29,30,35,42,43,46],displaynam:27,dispos:42,dissect:28,distinguish:42,distribut:[0,1,4,30],distro:31,dload:23,dns:[6,14,35,42],doc:[0,3,4,5,6,21,28,31,35,39,42,46,47],document:[2,16,28,30,31,34,37,38,40,44,45],doe:[10,24,28,29,32,33,35,38,39,42,46,47,48],doesn:[12,14,17,30,39,42,45,46],doing:[19,21,28,35,42,43],domain:[1,14,34],don:[4,7,10,14,15,17,21,22,24,27,28,29,30,34,35,39,42,44,45],donat:[24,47],done:[5,22,27,29,30,31,34,40,41,42,47],donkei:30,dontkickop:10,dot:39,doubl:21,doubt:37,down:[0,3,4,15,34,42],downer:24,download:[3,4,5,7,15,23,35,36,42],dozen:28,dp_help:27,dp_log:27,dp_mode:27,dp_server:27,dp_stdout:27,dport:16,dprintf:27,drastic:[27,42],driven:42,dronepup:42,drop:[3,4,35,42],dropp:[],dst:6,due:[17,21,28,35,42,46],dump:[21,35,42],duplic:42,dupwait:35,dure:[3,11,22,27,29,30],dynam:[2,3,10,29,30,33,42],dynamicban:[10,42],dynamicexempt:[10,42],dynamicinvit:[10,42],each:[0,4,6,10,15,18,23,28,29,30,32,34,35,36,39,42,45,46,48],earlier:19,easi:[5,28,30,42,44],easier:[3,19],easiest:42,easili:[0,1,2,4,28,36,42],east:35,ebai:35,ecb:42,ecdsa:29,echo:[36,38,45],ecparam:29,eden:42,edit:[2,3,28,45],editor:[29,30],editplu:30,edu:[42,48],effect:[15,33,35,42],effici:[0,4,30,34,35,36],effort:[0,2,4,42],efnet:[4,17,21],egg_lang:35,eggdrop1:7,eggdrop:[1,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,33,34,37,38,41,43,44,45,47,48],eggdroptest:[32,46],egggdrop:2,egghead:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,30,33,34,35,36,37,38,39,40,41,42,43,44,45,48],egghelp:[4,30],eight:[35,42],either:[3,4,15,16,29,30,31,32,33,34,35,37,42,44,46],element:42,elimin:29,els:[28,39,42],email:[4,29,35,42],embed:42,emerg:38,emot:46,empti:[42,46],enabl:[0,2,4,7,10,12,15,17,21,23,27,28,29,30,34,35,36,37,38,44,45,47],enclos:[10,37,42,46],encod:[42,43],encount:[30,47],encourag:[2,30,41],encpass2:41,encrypt:[2,5,6,9,19,29,31,34,36,44],end:[3,27,29,35,41,42,43],endless:10,enforc:[10,29,32,35],enforceban:10,english:[35,45],enhanc:7,enjoi:41,enlarg:3,enough:35,ensur:[27,29,30,34,41,42],enter:[3,10,15,29,31,35,39,40,41,42,44,46],entir:[30,42,46,47],entitl:48,entri:[3,4,29,30,35],env:35,environ:[16,35,36,44],eof:42,equal:42,equival:[6,21,31],equivil:[],eras:[15,42],error:[4,21,27,30,35,42,47],escap:42,especi:28,essenti:41,est:35,establish:[37,42,44],etc:[0,2,4,10,17,24,27,30,32,34,35,36,42,45,48],eth0:16,ethic:35,etiquett:4,european:35,evalu:42,even:[0,4,7,15,17,27,30,33,34,35,36,39,42,47],event:[0,4,24,27,32,34,35,46,47],eventu:19,ever:[29,30,35,42,44],everi:[0,3,4,10,15,17,21,23,27,28,29,32,33,35,37,41,42,48],everydai:35,everyon:[39,42],everyth:[3,28,42],everywher:[35,37,42],evnt:[21,42],exact:42,exactli:[15,17,27,28,42],examin:27,exampl:[2,3,4,5,7,15,16,21,27,28,29,30,31,35,39,42,44,45,46,47],exceed:35,except:[4,13,21,27,35,42,44],excess:[4,10,21],exchang:29,exclud:42,exclus:[21,42],execut:[2,3,7,27,28,29,32,42],exempt:[0,1,2,4,10,17,24,34,36,47,48],exhaust:[42,46],exist:[0,4,15,21,27,32,41,42,46,47,48],exit:[4,6,12,15,21,42],expand:[0,2,4],expans:42,expect:[6,13,35,42],experi:[3,15,28,30],experienc:3,expir:[10,17,18,21,33,35,42,44],explain:[10,42],explan:[10,30,31,42,46],explicit:38,explicitli:[5,42,44],express:42,extend:[24,36,38,42],extens:[3,30,32],extern:[16,29,35],extra:[7,35,38],extract:[30,42],f270:30,face:47,fact:[0,4,46],fail:[14,23,35,42,44],failur:[42,46],fake:42,fals:42,famili:35,familiar:[4,28],fanci:41,fancyp:28,far:15,fast:30,faster:42,fastest:[],fatal:42,fault:27,favor:[5,22],featur:[0,2,4,7,10,17,21,22,29,30,32,35,37,38,40,42,44,47,48],februari:13,feel:[4,5,27,40],few:[24,28,30,31,35,42,47],field:[21,32,35,42,44],fifth:1,fight:10,figur:[3,30],fil:42,file:[1,2,3,4,6,7,8,9,10,11,12,13,14,16,17,18,19,20,21,22,23,24,25,26,27,28,29,32,33,34,36,37,41,43,44,48],file_receiv:42,file_send:42,file_send_pend:42,filearea:42,filedb:[15,42],filemask:6,filenam:[6,10,18,30,35,44],filepath:6,files:15,filesi:[2,6,35],filestat:6,filesystem:[15,42,48],fill:[35,40,44],filt:[27,42],find:[3,6,14,17,20,27,28,29,30,39,40,42,47],fine:[17,21,35,46],finger:[13,30],fingerprint:[29,35,44],finish:[4,15,30,42],finnish:35,firewal:35,first:[0,2,4,5,15,19,21,27,28,30,31,34,35,41,42,44,45,46],five:42,fix:[0,3,4,27,35,42],flag:[2,5,6,10,13,17,22,27,28,30,35,36,43],flagmask:46,flash:43,flat:42,flexibl:[42,44],flood:[0,4,10,13,18,21,34,35,36,42,48],floor:1,flud:42,flush:22,focus:[24,47],folder:7,follow:[3,4,5,10,15,17,21,24,27,30,31,34,35,36,38,40,41,42,43,44,45,46,47],foo:[28,29,42],forbid:3,forc:[3,10,12,15,19,22,28,35,37,42],forcefulli:44,forev:35,forget:42,fork:[31,40],form:[0,4,27,28,42,43],format:[7,21,27,29,30,31,35,41,42,43,46],forward:18,found:[2,4,27,35,42,46],foundat:1,four:[10,28,32,35,37,42,43],fourth:28,fprint:[35,44],fragil:42,franklin:1,free:[1,2,5,27],freebsd:37,freeli:[0,4],freenod:21,french:35,frequent:[4,30],fresh:35,fri:42,friend:[10,48],frim:27,from:[0,1,2,3,4,5,6,7,10,15,16,17,18,19,21,22,24,27,28,29,30,31,32,33,34,35,37,39,41,43,44,45,46,47,48],front:[10,28,30,31,42,47],ftp:[5,30],full:[3,4,5,24,30,37,42,44,46,47],fuller:1,fulli:[5,35,42,47],fun:[3,47],func:27,func_nam:27,func_tabl:27,function_to_cal:27,further:[29,42],futur:[3,17,29,30,41,42],fwd:18,gain:[0,4,41,48],game:[0,2,4,24,47],garbag:27,gatewai:[24,46,47],gave:30,gayteen:0,gcc:3,geneer:4,gener:[0,1,3,4,19,24,28,29,30,38,41,42,44,47],genkei:29,genrsa:35,geo:28,german:35,get:[6,7,10,21,22,23,27,28,31,32,35,39,48],geteggdrop:[2,4,30],getinfo:42,getop:10,gif:15,git:[2,3,30,40],github:[2,4,30],give:[3,4,10,15,21,28,30,34,35,36,39,41,42,48],given:[4,14,15,16,30,42,46],global:[2,12,16,17,21,22,27,28,33,34,46,48],globalflag:42,gmt:[35,42],gnu:[0,1,3,4,11],goe:[3,10,29,33,34,39,42,44],going:[0,4,15,21,28,31,32,42],gone:[17,42],goober:42,good:[0,15,21,24,28,30,35,42,47,48],got:42,gpl:[0,4],grab:42,grain:28,grant:[29,36,44,47],graphic:44,greater:42,gree:28,greet:[0,2,4,10,28,32],greetmsg:28,greetscript:28,grep:29,ground:35,group:[15,16,35,38,42],grown:0,gseen:[6,20],guarante:[17,32],guess:17,gui:46,guid:[2,3,28,30,31],gunzip:30,guppi:42,gzip:[11,42],had:[3,5,10,34,35,42,47],haha:4,halfop:[10,42,48],hand:[28,35,42],handi:30,handl:[28,29,33,35,41,44,46],handshak:42,hang:[6,14],happen:[28,30,33,35,42],hard:[28,35],harder:28,hardwar:[0,4],has:[0,1,2,4,5,10,14,15,17,21,28,29,30,31,32,33,34,35,36,37,41,42,44,46,47,48],hash:[2,5,19,30],hasn:21,hate:48,have:[0,1,3,4,5,6,9,10,12,15,17,18,19,21,22,24,27,28,29,30,31,32,33,34,35,36,37,39,41,42,44,45,46,47,48],haven:30,head:35,header:[2,4,27,28,31,44],heaven:3,held:46,hello:[17,21,29,30,35,36,42],help:[0,3,13,21,27,28,29,30,33,34,35,37,39,42,43,48],helper:3,henc:[7,27,42],here:[2,4,10,13,14,15,17,18,21,23,28,29,30,33,34,35,42,45,46],herself:4,hidden:[15,30,36],hide:[6,37,42],high:45,higher:[17,19,22,23,30,44],highest:42,highli:[3,21,30],highlight:48,him:1,himself:4,hint:28,his:[21,30],histor:[29,42],histori:46,hit:42,hold:[22,42],hole:35,home:[3,15,16,29,30,44],hook:27,hook_5minut:27,hook_backup:27,hook_daili:27,hook_di:27,hook_hourli:27,hook_idl:27,hook_load:27,hook_minut:27,hook_num:27,hook_pre_rehash:27,hook_read_userfil:27,hook_rehash:27,hook_secondli:27,hook_userfil:27,hope:[30,47],hopefulli:[3,42],hors:30,host:[0,2,4,10,16,21,24,28,33,34,35,44,46,48],hostmask:[28,29,33,34,36,41],hostnam:[6,10,14,29,35,37],hosttarget:[24,46],hour:[6,25,27,33,35,42],hourli:[18,27,35],how:[0,3,6,10,13,14,15,18,21,22,24,28,29,30,31,33,34,35,42,44,45,46,47],howev:[4,7,13,21,29,31,32,35,41,42,44,45],htgt:46,html:[4,37],http:[2,4,6,20,25,30,32,38],hub:[4,22,30,34,35,41,44],hubbot:31,hubcap:48,humor:29,hup:42,hurt:5,iconfig:[3,7,30],idea:[28,30,40],ideal:[41,47],ident:[2,6,7,17,21,29,35,37,41,42],identd:[16,30],identifi:[29,35,41,42,48],idl:[10,27,42],idx:27,ignor:[0,4,13,21,22,28,34,35,36,42,46],ill:42,imag:4,immedi:[21,30,32,41,42],imperson:16,implement:[6,7,16,31,32,35,38,40,41,42,47],implementatino:[],impli:[1,27],importantli:28,improv:[0,4],inact:[10,23],inc:1,incess:0,includ:[0,2,3,4,7,17,25,27,30,31,33,35,36,37,41,42,44,46,47],incom:[15,35,42],increas:[32,35,41],incred:[30,42],independ:7,indic:[21,27,30,42,46],infeas:[24,47],infin:35,infinit:15,info:[3,4,10,12,17,27,30,35],inform:[0,2,3,4,5,6,10,15,25,27,28,29,30,32,34,35,37,38,42,44],infrastructur:44,ing:[17,24,47],init:[21,35,42],init_serv:21,initi:[27,28,30,37,38,42,44],input:42,insecur:10,insensit:42,insert:[10,43],insid:[28,35],instal:[0,4,5,28,29,31,35],instanc:[10,32],instantli:21,instead:[1,4,5,10,15,16,17,22,24,30,35,41,42,44,45,47,48],instruct:[7,30,41],integ:[10,42],integr:2,intend:[3,33,42],intens:21,intent:[24,47],intention:28,interact:[3,4,6,16,17,35,42,44,47],intercept:42,interchang:[31,37],interest:4,interfac:[2,24,42,47],intern:[21,32,35,42,46],internet:[0,4,42,44],interpret:[3,37,42,43],interv:42,introduc:[4,30,42],invalid:42,invers:43,invit:[0,2,4,10,17,24,34,36,38,47],invite:42,invok:42,involv:29,invt:42,ipaddress:42,iptabl:16,ipv4:[30,35,37],ipv4address:42,ipv6:[2,30,35,36,42],ipv6address:42,irc:[0,4,6,15,16,21,24,28,29,30,32,33,34,35,36,37,38,39,42,43,45,46,48],ircawai:42,ircd:[17,21,42],ircii:[23,42],ircnet:[4,10,17,21],ircop:[10,17],ircu2:17,ircv3:[2,32,36,42,45],isn:[6,15,21,22,25,30,33,42],isol:34,isop:10,isoptest:10,isp:30,isset:32,issu:[4,5,16,24,30,32,35,40,42,44,46,47],issuer:44,issupport:32,istn:10,isupport:32,ital:42,item:42,its:[1,2,4,7,10,15,16,17,19,21,22,24,28,29,30,32,34,35,36,40,42,45,47],itself:[15,27,28,29,35,42],itsself:[],j9irk4vs28b0obz9easys4w2ystji3u:47,jan:[42,44],janitor:[15,48],januari:[1,8,9,12,18,20,23,25,42],jkp:30,job:[3,4,29,44],john:1,join:[2,6,10,12,17,18,24,28,30,31,33,35,36,38,39,42,46,47,48],jpk:35,jul:7,juli:0,jump:[21,34,44],jun:45,june:16,jupe:42,just:[0,3,4,5,6,14,15,17,19,22,27,29,30,32,34,35,39,41,42,45,46,47],karma:40,keep:[2,4,10,15,21,23,30,35,47],kei:[2,3,10,17,24,28,29,35,41,46,47],kept:[33,35],keyout:[29,44],keypair:[29,31],kick:[10,17,21,32,35,42,45,48],kicker:42,kiddi:35,kill:[30,42],killer:5,kilobyt:[15,35],kind:42,know:[17,18,21,24,27,28,32,33,34,35,42,45,47],knowledg:0,known:[21,29,35,41,42],kreativrauschen:[6,20],kvirc:44,lag:[35,39],lame:[10,17,34,35,42],lamer:35,lameshar:34,lamest:[10,30,34,35,43],lamestbot:[3,10,18,21,30,34,35,42,43],lang:45,languag:[28,35,36,45],larg:[2,15,17,21,35],larger:[28,41],last:[0,5,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,30,33,34,35,37,38,39,42,43,44,45,46,48],lastli:42,laston:42,late:42,later:[1,3,6,9,18,19,25,28,30,35,42,44],latest:[4,5,30],launch:30,layer:[29,31],lazi:17,leaf:[34,35,41,44],learn:[17,29,30,35,36,42],least:[4,17,27,30,33,35],leav:[10,21,30,35,39,42,47],left:[17,42],legal:[2,4],len:21,length:[17,21,27,41,42,44],less:[13,39,42],let:[4,6,10,14,18,27,28,30,34,35,36,42],letter:[4,35,48],level:[11,16,29,32,35,48],libera:[2,4,5,21,27,28,29,30],librari:[28,41,44],libssl:[4,30,31],licens:[0,1,4],lieu:42,life:[18,30],light:47,like:[0,1,4,6,9,10,13,15,17,19,27,28,29,30,35,36,37,39,40,41,42,44,46,47,48],limbo:35,limit:[2,6,10,15,17,21,34,37],lindex:42,line:[2,3,5,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,32,34,35,36,41,42,44,45,46,47],link:[0,2,3,4,5,6,7,15,22,23,27,35,36,38,41,44,45],linux:37,list:[0,4,6,10,14,15,19,21,22,24,25,27,28,29,30,31,32,34,35,36,38,39,44,46,47],listen:[29,30,34,35,37,44],liter:[27,42],littl:[3,5,15,24,30,34,45],llama:34,llamabot:[30,35],load:[6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,32,34,35,41,42,47],loadmodul:[8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,35,41,47],lobster:41,local:[15,28,30,35,39,40,42,44],localfil:6,locat:[2,4,23,28,29,31,35,44],log:[0,2,4,10,19,24,27,30,32,40,41,42,47],logfil:[25,27,30,35,45],logfilenam:35,logflag:35,logic:42,login:[30,35,41,46],logmod:27,logsiz:35,longer:[3,5,15,17,19,27,30,31,42],look:[0,4,5,6,10,20,25,26,28,29,31,32,35,36,41,42,44,47],lookup:[14,35,37,42],lose:10,lost:42,lot:[5,17,28,30,32],low:[21,23],lower:21,lowercas:21,lsa:15,luck:[30,47],lurk:2,mac:37,machin:[3,4,16,30,35],macro:27,made:[0,1,3,4,5,10,22,40,42,44,47],magic:28,mai:[1,4,5,10,11,15,16,17,23,28,30,34,35,37,38,42,45,46,47],main:[7,28,30,31,32,39],maintain:[2,16,30,32,45,46],mainten:48,major:[27,30,42],make:[0,2,3,4,5,6,7,10,13,15,19,21,22,24,27,28,29,30,31,35,37,38,40,42,44,45,47],makefil:[3,27],making_modulenam:27,man:35,manag:[2,4,6,15,24,31,47],mandatori:42,mani:[4,5,10,14,15,17,21,27,29,30,31,34,35,42],manipul:[2,35],manpag:35,manual:[4,29,34,35,37,42,44,46],mar:37,march:[33,43,48],mark:[15,36,42,48],mask:[15,21,28,35,46],masquerad:35,master:[15,29,30,33,34,35,42,43,48],match:[1,2,10,15,17,27,28,33,35,41,44,46],math:42,matter:[1,14,28,29],max:[15,17,18,21,23,35],maxdepth:[],maxim:35,maximum:[10,14,15,17,18,21,23,35,41,42,44],maxsend:14,mayb:[28,35],mco:[35,42],mcobx:30,md5:[6,9],mean:[15,17,21,28,29,32,33,34,35,36,37,41,42,44,46],meaning:[24,42,47],meaningless:48,measur:21,mechan:29,meet:44,mem:42,member:[10,27,32],memberlist:42,memori:[27,42],mention:27,meridian:35,messag:[4,10,21,27,28,30,32,35,36,38,39,41,43,45,46],method:[4,6,9,16,17,19,24,28,30,31,41,45,47],midnight:35,might:[4,17,23,27,35,42,44],migrat:5,militari:35,milk:48,min:35,miniatur:39,minimum:[0,10,42,46],minor:[27,42],minu:10,minut:[4,10,17,23,27,29,30,33,35],mirc:[21,42],misc:[35,42],miscellan:2,misnom:42,miss:[4,30,32,42],mix:[10,17],mkcoblx:35,mkdir:6,mnnrrpp:42,mnot:22,mnt:30,moc:42,mod:[3,6,7,20,24,27,35,42,46],mode:[4,5,10,13,17,21,24,27,29,32,33,35,36,38,47],mode_proc:42,mode_proc_fix:42,modechang:42,moder:[24,29,46,47],modern:[16,41],modes_per_line_max:17,modif:[5,30,42],modifi:[2,6,14,17,28,32,35,42],modul:[0,2,4,30,32,34,36,41,47],modular:2,module_clos:[],module_depend:27,module_entri:27,module_expmem:[],module_find:27,module_load:27,module_nam:27,module_regist:27,module_renam:27,module_report:[],module_start:[],module_t:[],module_undepend:27,module_unload:27,modulenam:[7,27],moment:[17,30,31],monitor:[4,29,33,36,38],month:[35,42],moo:42,more:[3,4,5,6,13,15,17,20,27,28,29,30,31,34,35,36,38,40,41,42,44],moreov:35,most:[0,2,4,5,16,17,21,27,28,29,30,31,35,36,39,42,46,47],mostli:[24,42,47],motd:[35,43],mount:23,move:[3,4,15,21,30,42,47],mpj:42,mrlame:[30,35],mrslame:[30,35],msg:[4,6,17,20,21,29,30,35,36,39,41,46],msgid:46,msgm:[21,42],much:[2,3,24,27,30,39,42],multi:30,multipl:[0,2,4,16,28,30,34,35,36,42,46],must:[1,2,3,4,10,14,16,17,21,23,27,29,30,31,32,34,35,41,42,44,46],mydir:15,myownevent123:42,myproc:42,mytag:42,myvar:45,myword:17,name:[3,4,6,8,15,21,27,28,29,30,31,32,35,46],nano:30,nat:[16,35,37],natur:46,nearli:7,necessari:[10,31],necessarili:42,need:[0,3,4,10,14,16,17,21,27,28,29,30,31,32,34,35,37,41,42,44,46,47,48],needal:42,needop:42,neg:[14,35,42],negcach:14,negoti:[42,44],net:[1,3,17,21,24,30,32,38],netbsd:37,nethack:48,netsplit:[16,17,35,36,42],network:[0,2,4,17,21,35,42,43],never:[4,5,10,35,42],new_module_nam:27,newer:[5,30],newhandl:42,newidx:42,newnick:42,newus:[30,35],next:[5,10,15,21,27,28,30,31,35,42],nfree:27,nice:27,nicebot:30,nick:[10,17,21,25,28,29,30,35,48],nicknam:[6,21,28,29,30,32,35,43,45,46,48],nickserv:[2,44],nist256p:29,nkch:42,nmalloc:27,no_irc:[6,21],nobodi:[15,28],node:[29,44],nodesynch:10,noemail:4,non:[3,10,14,16,17,21,27,29,33,34,42,44,47],none:[8,9,10,12,14,18,19,20,21,23,26,42],noout:29,noqueu:42,nor:16,normal:[0,4,6,13,14,15,16,21,27,28,31,35,42,44,45,46,47],notabl:47,notat:35,notc:42,notcproc:42,note:[2,3,6,7,9,10,14,17,19,21,22,27,29,30,32,34,35,41,44,46,47],notebox:42,notefil:[18,42],notepad:30,noth:[27,35,42,47],notic:[2,13,15,28,34,35,42,47],notif:42,notifi:[18,21,30,35,36,38,42],nots:1,nov:34,novemb:[22,38],novic:[0,4],now:[3,5,15,16,17,28,29,30,31,34,35,37,41,42,46,48],ntik:42,number:[2,10,15,17,18,19,21,23,24,27,30,31,34,35,41,42,44,46,47,48],numer:[29,31,42],nxdomain:14,oauth:47,obtain:[2,31,44],obvious:[33,42],occur:[17,28,42],occurr:27,octal:35,octob:[10,19,21,35],off:[10,16,17,21,30,34,35,39,42],offer:[30,31,32,46,47],offici:[2,4],offlin:42,offset:35,often:[4,6,14,29,35,46],oident:16,oidentd:16,okai:35,old:[6,19,21,30],old_module_nam:27,older:[4,37,42],oldest:[2,42],oldhandl:42,omin:28,omit:[42,44],onc:[4,10,15,17,19,21,28,29,30,40,42],one:[4,10,15,16,17,21,27,28,29,30,31,33,34,35,36,39,40,41,42,44,45],ones:[14,22,34,37,42],onjoin:18,onli:[3,4,5,6,7,10,15,16,17,18,20,21,22,25,26,28,29,30,32,33,34,35,37,39,41,42,43,44,45,46,48],onlin:[6,15,18,29,32],opchar:17,open:[16,29,35,39,40,42,44],openbsd:37,openssl:[2,3,4,19,29,30,31,35,44],oper:[4,13,21,28,35,37,42,43],opped:[10,42,48],opping:[0,4],oppos:42,ops:[10,32,42,48],optim:[6,21],optino:38,option:[1,3,4,7,10,15,16,19,21,29,30,35,44,47],order:[4,14,28,32,35,41,42,44,46],ordinari:[42,44],org:[2,4,5,6,25,28,30,31,34,35,42],origin:[1,21,30,40,42],oss:16,other:[0,1,4,6,9,10,14,15,16,17,18,19,21,22,27,28,29,30,31,33,34,35,36,37,38,39,41,42,43,44,45,46,47,48],otherdir:3,otherwis:[3,4,12,15,28,32,33,34,35,37,41,42,44,46],our:[30,34,42],ousterhout:1,out:[0,3,4,23,25,28,29,30,34,35,39,41,42,44],outform:29,outgo:[35,42,45],output:[2,3,27,29,31,41,43,45,46],outsid:[19,31,35],over:[15,21,24,27,28,30,35,37,42,44,45,47],overal:32,overhead:7,overrid:[22,37,44],overridden:17,overwrit:[16,30,42],overwritten:[5,35,42],own:[1,7,15,16,21,22,28,29,30,31,38,42,44,45,47],owner:[4,10,30,35,39,42,48],p_tcl_hash_list:27,packag:[1,3,4,30,31],pad:42,page:[30,40],pai:[5,32,42],pain:[23,30],pair:[29,31,32,42,44,46],paragraph:3,paramet:42,paranoid:[22,35],pars:42,part:[0,4,21,24,28,35,36,42,44,45,47],parti:[2,5,12,30,34,35,36,42,44,48],particular:[5,29,35],partproc:42,partylin:[2,4,6,12,30,31,32,34,35,37,41,42,44,45,46,47,48],pass:[28,29,30,32,37,39,41,46],passiv:34,passthru:35,password:[5,6,9,17,19,21,22,29,30,34,35,36,39,41,44,47],past:[1,4,27,35],patch:[2,37,42],path:[2,3,15,16,30,31,42,44],pathnam:42,patient:15,pbk:41,pbkdf2:[2,5,6,41],peer:[21,35,44],pem:[29,35],penalti:21,pend:[6,10],peopl:[4,10,15,16,17,18,21,22,28,30,35,36,39,42,43,48],per:[17,42,46],percent:43,perfect:32,perform:[0,3,4,5,10,30,42,48],perhap:30,period:[6,14,30,42],perm:35,perman:[10,33,35,42],permiss:[4,35,41],permit:42,perorm:2,persist:30,person:[4,28,30,35,42],phew:30,phrase:42,physic:34,pick:42,pictur:5,pid:[30,35,42],pidfil:35,piec:[3,28],ping:13,pipe:34,pl1:42,place:[1,3,5,7,10,15,17,28,30,33,35,42,44,47],plain:[29,35,44],plaintext:[29,42,44],plan:[4,28,42],platform:[0,4,24,42,47],pleas:[4,5,6,7,9,10,16,19,21,31,35,38,42],plu:[10,21,35,42,44],pmsg:28,point:[3,6,21,26,30,34,35,42],pointer:[1,3,4,36,43],popul:46,popular:[0,4,5,30,35],port:[1,5,14,16,21,22,29,30,31,34,35,37,44],portabl:42,portion:[3,7,10,42],portrang:35,posit:[27,35],posix:42,possibl:[3,10,13,15,21,29,31,35,37,38,39,42,44,46],potenti:[5,16,28,42,46],pour:40,power:[4,36],practic:[41,42],pre:[42,44],preced:[30,42,44],prefer:[35,37,44],prefix:[5,17,21,28,31,35,39,44,46,47],preinit:42,prematur:30,prepar:34,prepend:35,prerehash:42,prerequisit:2,prerestart:42,prerout:16,present:[2,6,28,29,32,37,42,46,47],preserv:30,pretend:47,pretendnet:31,pretti:[0,39],preval:29,prevent:[0,4,10,17,18,24,29,30,34,37,42,47],previou:[1,3,4,5,19,30,42,47],previous:[5,30,42],primari:[21,35],prime256v1:29,prime:35,printf:27,prior:[3,29,30,32,41,44],prioriti:42,privat:[18,22,28,29,30,31,35,39,42,44],privatekei:[29,31,35,44],privileg:[0,4,16,48],privmsg:[10,28,29,42],probabl:[21,29,30,31,42],problem:[30,35,37],proc:[21,27,28,46],proce:42,procedur:[2,22,32,46,48],process:[0,3,4,5,11,15,16,23,29,30,34,41,42,44],procnam:[28,42,46],produc:[35,42],program:[0,2,4,16,29,30],progress:15,prohibit:35,project:[2,40,47],prompt:[3,4,32],promptli:30,proper:[37,42],properli:[5,30,31,34,35],protect:[0,2,3,4,10,19,21,29,30,33,35,41,42,44,48],protectfriend:10,protecthalfop:10,protectop:10,protocol:[31,35,38,42,44],prove:30,provid:[0,2,4,5,6,7,8,10,11,12,13,14,15,16,17,18,20,21,22,23,24,27,29,30,35,37,38,40,42,44,46,47],pseudo:42,pub:[4,5,21,29,32,42],pubkei:29,publicli:25,publish:35,pubm:[21,42],pull:[4,40,41],punish:[10,42,48],purpos:[0,1,6,25,26,34,35,42],push:[40,42],put:[1,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,30,35,42,44],putlog:[21,27,28],putquick:21,putserv:[10,28,29],putti:29,pwd:[6,30],quakenet:[4,21],qualifi:35,quann:[6,20],queri:[14,16,32,37],question:[4,29],queu:[15,21,42],queue:[21,27],quick:[2,27,30,35],quicker:30,quickli:[2,35],quiet:[21,35,48],quit:[4,6,21,30,35,42],quot:[42,46],quota:35,raid:[24,47],rais:[10,21],ram:35,rand_max:42,random:[10,21,34,42],rang:[30,35],rate:21,rather:[5,42,44],raw:[32,35,44],rawt:42,rcvd:42,reach:[17,21,35],react:[28,32],read:[0,2,3,4,6,7,16,27,28,29,30,31,35,42,43,47],readabl:42,readm:[2,3],readonli:27,real:[21,27,29,42],realli:[28,30,35,45],realnam:[21,42],reason:[4,27,29,30,34,35],reboot:[16,29],receiv:[14,15,21,23,29,34,42,46],recent:[4,30,42,44],recev:[],recipi:42,recogn:[17,21,29,48],recom:[],recommend:[4,5,10,23,27,30,41,42,45,46],recompil:[17,30],reconnect:[22,42],record:[2,22,27,32,36,48],redirect:16,reduc:[27,46],refer:[27,28,31,35,42],refin:28,reflect:[5,42],refresh:[42,46],regardless:42,regist:[2,10,29],regular:[10,42,44],regularli:36,rehash:[7,27,28,29,35],reiniti:42,reject:[21,34,35],rejn:42,rejoin:[30,42],rel:[14,27,30,42],relai:[0,4,34,35],relat:[1,6,10,28,37,42],releas:[0,1,30,41,42],relev:[4,27,30],reli:[29,42],reliabl:[32,42,46],relink:34,relinquish:42,reload:29,rem_builtin:27,rem_tcl_command:27,rem_tcl_int:27,rem_tcl_str:27,remain:[10,33,42],remaind:[15,46],rememb:[10,28,29,30],remind:35,remot:[15,34,35,42,43],remotebotnam:42,remov:[5,10,15,19,27,29,30,33,36,37,41,45,46,47],renam:[2,15,27,30,35,42],render:[5,24,47],repeat:[4,32,42],replac:[10,21,27,29,35,42,43,47],repli:[6,13,14,16,17,32,35,42],replic:[46,47],repo:40,report:[6,15,25,27,30,45],repositori:[4,30],repres:[42,46],req:[29,35,44],request:[0,4,5,7,10,13,15,17,21,30,32,33,35,37,38,40,42,44,45,47],requir:[2,4,5,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,29,30,35,41,44,46],reread:42,resend:[14,42],reserv:[30,35,39],reset:42,resolut:35,resolv:[6,14,35,42],resourc:27,respect:[14,37,42,43],respond:[10,30,42],respons:[21,32,42],rest:[3,27,34,35,41,42,46],restart:[2,3,4,5,7,28,30,35],restrict:[1,15,16,21,35,42,43,47],result:[21,32,33,35,37,42],resum:42,resync:22,retain:42,retri:23,retriev:[6,18],retrydelai:14,reus:[5,42],reveng:10,revengebot:10,revers:[41,42],revert:42,review:[29,31],revis:[0,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,33,34,35,37,38,39,42,43,44,45,46,48],revok:[21,35],rfc1459:[38,42],rfc2812:38,rfc:[17,21,24,42,47],rfc_compliant:42,rich:[0,4,30],right:[6,15,16,26,28,30,42],rijndael:19,risk:[1,21],rizon:21,rmdir:6,rmst:46,robei:[1,3,4,36,43,48],robot:36,roomsstat:24,roomstat:[24,47],root:[15,16],round:[19,41],rout:[16,42],routin:[17,35,42],rsa:35,rule:30,run:[2,3,4,5,7,10,16,21,27,28,29,30,31,32,34,35,41,43,44,46],s_client:44,safe:[19,29,30,31,41,47],sai:[4,10,15,28,31,34,42],said:[28,34,42],sake:47,salt:[28,41],same:[0,3,4,5,7,10,11,16,17,27,28,30,32,34,35,38,41,42,43,44,45,46],sampl:[10,30,47],sane:21,sanitycheck:35,sasl:[2,30,36,38],save:[5,6,10,11,12,22,34,35,36,41],scan:30,scenario:[31,32,34],schat:[35,44],schedul:42,scheme:1,scope:31,screen:[4,40,43],script:[0,2,3,4,7,10,21,29,30,33,36,37,42,45,46,47,48],scripter:34,sdcc:44,sdebug:3,seamless:41,seamlessli:19,search:[27,29,42],sec:35,second:[4,10,13,14,17,21,23,27,28,35,45],secondli:42,secret:10,section:[5,10,17,21,24,28,30,34,35,42,47],secur:[0,2,4,6,9,19,29,30,34,35,36,41,42],see:[0,2,3,4,5,6,10,15,17,21,24,25,27,28,29,30,31,32,34,35,37,39,40,41,42,43,46],seen:[2,6,10,32,35,42],selecet:42,select:[4,30,35,36,40,42],self:[2,21,31,35,44],send:[4,6,11,15,17,18,21,22,23,27,28,30,32,34,37,42,45,46],sender:42,sens:[0,4],sensit:41,sent:[6,15,17,22,25,29,32,35,38,39,42,44,46,48],separ:[3,7,21,30,34,35,36,37,38,42,45,46],septemb:14,seri:[30,42,44],serv:35,server:[2,5,6,7,10,13,14,15,16,17,19,24,25,27,29,30,35,36,37,38,44,45,46,47],serverlist:42,serverop:10,serverror:21,servic:[6,10,16,24,29,32,42,44,47],servivc:42,session:[4,37,38],set:[0,1,2,3,4,5,6,10,11,12,13,14,15,16,17,18,19,21,22,23,24,27,28,31,32,33,34,36,38,39,41,43,45,46,47,48],setcap:16,setnam:[36,38],setup:[4,6,7,30,35],seven:[10,42],sever:[0,4,13,27,30,31,38,42,45],sexystuff:28,sha1:44,sha1sum:29,sha256:19,shall:35,share:[0,2,4,6,10,11,23,27,35,36,42],sharebot:[34,35,42],sharefail:23,she:42,shell:[0,3,4,16,29,30,35,42],shorter:10,should:[1,3,4,5,10,12,13,14,15,17,19,21,22,24,27,28,29,30,34,35,37,39,41,42,44,46,47],shouldn:16,show:[4,6,10,15,25,28,34,35,42],shown:[15,30,35],shutdown:42,shutdownreason:42,side:[35,42,44,47],sidenot:31,sighup:42,sigil:42,sigkil:42,sign:[21,29,31,35,42,43,44,47],signal:42,signific:[4,6],significantli:[32,46],signoff:42,sigquit:42,sigterm:42,silent:35,simialar:[],similar:[4,10,29,30,35,39,40,42,45],similarli:46,simpl:[4,27,28,29,30,42],simpli:[4,5,29,30,31,38,42,47],simplifi:42,simul:[35,42],simultan:[15,23,42],sinc:[0,3,5,17,30,34,35,36,37,42,44,45],singl:[16,17,29,42,46],sit:[0,4,10,35,41],site:[6,48],situat:[32,34],six:42,size:[15,23,27,35,42],skim:4,skip:[30,42],slash:[30,39],slave:34,slennox:30,slow:[15,30,35],slower:35,small:[3,23,34,45],smaller:3,smile:3,snapshot:[2,30],snowbot:15,snt:29,sock:[27,35],socket:[16,27,31,42,44],softwar:[0,1,2,4],solut:41,some:[0,4,5,10,11,12,13,14,15,16,17,18,19,21,22,23,27,30,32,33,34,35,36,37,38,42,44,45,47,48],someircnetwork:35,someon:[4,10,17,28,30,31,42,46],someth:[4,28,30,40,42,47],sometim:[4,21,30],somewher:[3,35],song:42,soon:[10,42],sort:[0,4,33],sound:28,sourc:[1,3,4,5,6,7,27,28,31,35,40,42,44,45],space:[0,23,35,38,42],spawn:0,spec:32,special:[34,42],specif:[6,10,14,16,17,19,21,24,30,34,37,38,42,44,46,47,48],specifi:[10,14,15,16,18,21,22,27,29,30,33,35,36,37,41,42,44,46],spectrum:[24,47],spent:[30,42],split:[10,17,37,39,42,43],splt:42,spoiler:47,spoken:42,spoof:16,spread:35,squar:37,squelch:21,src:[3,7,17,27],ssh:30,ssl:[2,3,4,5,21,29,30,31,36,42],sslcert:[3,31,35,44],sslinc:44,ssllib:44,sslport:44,sslsilent:[3,44],sssss:[],stabil:23,stabl:[2,4,30],stack:[17,37,42],stackabl:[],stage:27,stai:42,stall:42,stand:[0,4,30],standard:[14,16,17,23,27,28,38,42,44,47,48],start:[2,3,5,6,9,16,19,21,26,28,29,34,35,38,39,41,42,43,46,47],starttl:44,startup:[2,41,42],stat:6,state:[4,42],statement:42,statist:[6,15,25],statu:[0,2,4,10,24,27,31,35,45,46,47],status:32,statuslog:10,stb:21,stdio:27,stdlib:27,stdout:27,stealth:[30,35],step:[2,3,5,27,30,47],stick:33,sticki:[33,42],still:[1,4,5,10,15,22,30,31,32,35,36,42,47],stone:21,stop:[0,10,15,17,27,29,42,46],stopnethack:[10,48],storag:[6,12,41],store:[5,6,10,12,15,18,24,25,28,30,32,34,41,42,46,47],str_dir:27,str_protect:27,stream:[24,47],street:1,strftime:35,string:[2,17,27,28,29,35,41,46,47],strong:35,strongli:[2,4,30],stuff:[2,4,27,28,30,35,42],style:[33,42],sub:[15,42],subdirectori:[15,42],subject:44,sublist:42,submit:[2,42],subscrib:[46,47],subsequ:42,substitut:[2,35],succeed:42,success:[27,30,42],successfulli:[4,27,42,46],sudo:[16,30],suffic:28,suffici:31,suffix:[7,35],suggest:[5,27],suit:[16,30],suitabl:46,sum:28,summar:21,sun:35,sundai:42,supplant:42,supplementari:32,suppli:35,support:[0,2,3,4,5,6,8,10,11,14,16,17,18,21,22,23,29,30,31,33,35,36,42,45,47],sure:[4,10,27,28,30,31,34,35,42,47],symbol:[31,42],synchron:44,syntax:[5,29,35,44,48],sys:27,system:[2,3,7,14,15,16,27,30,35,36,37,42,43,44],systemctl:29,systemd:[3,4],tab:27,tabl:[27,38,42],tag:[15,36,38,46],tail:29,take:[3,4,5,6,15,19,21,25,28,30,35,41,42,44],taken:[27,42],takeov:17,talk:[28,31,32,36,39],talli:27,tar:[4,7,30],tarbal:[0,30],target:46,task:[0,2,4,34],tcl:[0,1,2,3,4,6,10,11,21,27,28,30,33,35,36,37,44,45,47],tcl_cmd:27,tcl_int:27,tcl_string:27,tclsh:4,tcltk:4,tcp:[2,16,37],team:[0,1,2,3,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,28,33,34,35,36,37,38,39,40,41,42,43,44,45,48],technic:47,techniqu:45,tell:[15,28,29,30,31,32,34,35,42,47],telnet:[2,29,30,34,36,37,39,41,42,43,44],temp:42,templat:40,temporari:[10,23,25,33,35],ten:29,term:[2,28,31,42],termin:[4,5,42],test:[28,30,48],text:[4,10,21,27,29,35,43,44,45,46,48],textfil:2,than:[4,10,13,15,17,30,31,35,41,42,44],thank:4,thee:[29,42],thei:[0,3,4,5,7,10,12,13,17,18,21,22,27,28,29,30,31,32,33,34,35,41,42,44,46],them:[0,1,3,4,5,7,10,12,13,14,15,17,18,21,22,23,27,28,29,30,31,34,35,36,37,38,41,42,45,47,48],themselv:[17,30,34,42,45],therebi:[45,47],therefor:[6,17,30,35,42],thi:[0,1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,40,41,42,43,44,45,46,47,48],thing:[3,4,6,24,26,27,28,29,34,35,42,47],think:[40,48],third:[28,34],thorough:[27,29,31,47],those:[1,3,7,11,15,21,27,28,29,30,42,45,46,47],though:[15,21,28,30,42,44],thr:35,three:[21,29,32,33,34,35,42],through:[4,10,15,21,24,28,31,36,37,38,39,42,47,48],throughout:27,thse:[],thu:[16,28,32,37,41,42],tidi:27,ties:42,till:[],time:[0,3,4,10,14,15,16,17,19,22,23,28,29,30,31,32,33,34,35,36,38,39,41,43,44,45,47],timeout:[6,14,21,23,35,46],timestamp:[35,42],timezon:35,tip:[2,42],titl:48,tiwtch:6,tls:[42,44],tmi:46,tmp:[23,42],toctre:[],todai:42,togeth:[0,2,4,21,28,34,35,36,38,42],token:47,told:28,ton:24,too:[15,17,21,23,27,35,42],tool:[3,30],top:[3,4,28,40,42],topc:42,topic:47,total:[10,27,36,42],tout:42,toward:28,trace:21,track:[2,3,15,24,27,29,42,47],tradit:[24,37,45,46,47],tradition:16,traffic:[3,35,45],trail:27,transfer:[2,6,7,11,15,22,30,34,35,37,42,44,48],transit:[19,41,42],transmit:21,transpar:35,transport:31,treat:[42,47],tree:[0,4,30],tri:[27,35,42],trick:[28,45],trigger:[10,21,27,28,32,42,46],troubl:[14,35],troubleshoot:[4,30],truncat:46,trust:[4,35,48],ttl:14,turbo:[23,30],turn:[10,16,21,35,42],tutori:[2,31],twcmd:[24,47],twice:42,twitch:[2,6,36],twith:46,two:[4,6,17,22,28,30,32,33,34,35,41,42,44,45],type:[3,4,6,7,10,12,17,21,24,27,28,29,30,31,32,33,34,35,36,37,38,39,44],typic:[15,24,35,36,39,42,47],typo:42,ubuntu:31,ufl:42,ugli:15,uglyman:15,uhost:[28,42],uid:[35,44],umod:21,unabl:[17,30,34,37,42,47],unaccess:36,unavail:[21,35],unban:[10,35,42],unbind:[17,35,45,46],uncertainti:46,uncom:[29,31,35,41],under:[0,4,30,36,42],underli:42,underlin:[42,43],undernet:[4,17,21,42],understand:[35,42],understood:21,unexpect:42,unfortun:29,unhid:6,unimport:35,unintend:46,uniqu:[35,42,46],univers:35,unix:[0,3,15,16,30,36],unknown:42,unld:42,unless:[17,21,28,30,33,35,42],unlik:[3,36],unlimit:34,unlink:[23,35],unload:[27,42],unoffici:37,unpack:0,unreach:34,unrealircd:[17,42],unreli:[24,46,47],unrest:0,unset:42,unshar:[6,48],unstick:33,unsticki:33,unstuck:42,unsur:30,untar:5,until:[7,10,15,33,35,42],unzip:[5,30],updat:[4,5,19,27,30,32,35,36,41,42,46],upgrad:[2,41,44],uplink:42,upload:[15,30,36,42,45],upon:[0,4,46,48],upper:14,uptim:[2,6],url:[35,42],usa:1,usabl:[6,15,35],usag:[2,4,6,27,35,42],use:[0,1,3,4,5,6,7,9,10,12,13,14,15,16,17,19,21,22,23,27,28,29,30,31,33,34,35,37,39,41,42,43,44,45,46,47,48],used:[0,2,4,10,11,13,15,19,21,27,28,29,30,31,33,34,35,36,37,39,41,42,43,44,45,46,47,48],useful:[1,4,10,23,30,34,42,44,45],useless:[5,24,47],user:[0,2,3,4,5,6,7,9,10,11,12,13,16,17,18,19,20,21,22,23,24,27,28,30,31,32,33,35,36,37,39,40,41,43,44,45,46,47],userban:10,userexempt:10,userfil:[0,2,4,5,6,9,10,11,19,22,23,27,29,30,34,35,41,42,45],userflag:17,userhost:46,userinfo1:35,userinfo:[13,42],userinvit:10,userlist:[6,17,20,22],usernam:[16,29,30,35,46,47],usernotic:[24,46],userst:[24,47],uses:[3,6,17,21,23,27,28,29,30,31,33,35,41,42,44,47,48],using:[1,3,4,6,7,9,10,15,16,17,19,21,27,28,29,30,33,34,35,37,41,42,44,45,46,47],usrntc:46,usst:46,usual:[4,29,30,31,33,37,40,41,42,44,47],utc:35,util:3,utim:28,vagu:30,vali:42,valiant:[0,4],valid:[3,10,21,27,34,35,36,42,44],valis0:42,valu:[10,13,14,17,21,24,27,28,35,41,43,44,46,47],vari:[42,48],variabl:[2,5,10,11,12,13,14,15,16,17,18,19,21,22,23,27,28,32,35,37,43,46],variable_nam:27,varieti:[0,4],variou:[1,27,30,33,35,42],verbos:42,veri:[4,6,16,20,21,28,35],verif:[21,35,44],verifi:[21,29,35,44],version:[0,1,2,3,4,5,13,17,25,27,28,37,38,43,44,46],vertic:42,vhost4:[30,35,37],vhost6:[30,35,37],vhost:[30,35,37],via:[2,3,4,6,11,16,17,20,22,27,28,29,30,32,33,34,35,36,37,38,39,41,43,44,46,47],video:42,view:[5,7,19,29,30,36,42,46],viewer:46,vim:30,vip:[46,47],virtual:35,visibl:42,visit:[5,47],vista:37,voic:[0,2,4,10,29,42,48],wai:[1,3,16,21,24,27,28,29,30,31,32,33,34,35,39,41,42,44,47],wait:[6,14,15,17,21,23,30,32,35,42],walk:31,wall:42,wallop:[35,42],want:[0,3,4,6,10,12,14,15,17,18,21,23,27,28,29,30,34,35,37,42,44,45],war:0,warm:40,warn:[4,16,28,42],warranti:1,washalfop:48,wasn:42,wasop:[10,17,48],wasoptest:10,watch:[39,46],web:[2,6,24,35,46],webpag:2,websit:30,week:42,weekdai:42,welcom:28,well:[1,24,28,29,30,31,32,35,41,42,44,47],were:[1,16,17,30,33,34,35,37,41,42,47],west:35,wget:30,what:[0,1,2,5,6,10,15,17,21,25,28,29,30,35,38,39,41,42],whatev:[1,3,28,35,36,42,43],when:[3,4,6,7,9,10,12,15,16,17,21,22,27,28,29,30,32,33,35,37,39,41,42,44,46,47],whenev:[21,27,32,34,42,44],where:[4,6,10,14,15,18,21,27,28,29,30,31,32,35,36,41,42,44,46],wherea:42,wherev:37,whether:[35,37,42],whew:28,which:[3,5,6,10,12,14,15,16,21,22,27,28,29,30,32,33,34,35,37,39,41,42,43,44,45,46,48],whichev:33,whisper:[24,46],whitespac:42,who:[10,15,17,21,28,30,32,35,39,42,48],whoi:[29,35],whole:27,whose:[33,42],whox:[36,42],why:[28,30,42],wide:[39,44],width:43,wild:42,wildcard:[10,28,29,42,46],window:[2,29,37],wise:[4,35],wish:[3,5,7,16,17,25,27,30,33,34,35,42,46],within:[6,15,27,30,31,33,35,38,42],without:[0,2,4,5,6,9,10,13,19,27,28,29,30,31,34,35,36,38,41,42,44],wizard:31,won:[6,10,22,27,28,30,33,34,35,42,44,46],woobi:[2,3,6,27],word:[15,17,29,30,42,46,47],work:[3,5,6,10,13,15,19,20,22,27,28,29,30,33,34,35,37,38,40,41,42,44,45,46],workaround:[24,32],world:[0,2,4,31,35],worri:24,worth:3,would:[4,5,13,28,29,30,31,32,34,35,42,43,44,46,47],wouldn:35,write:[1,2,6,7,26,30,35,41,42,47],written:[0,27,30,42,47],wrote:28,wspm:46,wspr:46,wth:[],www:[2,4,6,20],x509:[29,35,44],xfer:[23,48],xtra:42,xvf:30,xxd:29,year:[0,4,30,35,42],yes:[28,31,42],yesterdai:35,yet:[4,21,30,35,42],yoru:29,you:[0,1,3,4,5,6,7,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,39,40,41,42,43,44,45,46,47,48],you_want_to_export:27,your:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,34,35,36,37,39,40,41,42,44,47],yourbot:45,yourbranchnam:40,yourconfig:3,youreggdrop:29,youreggdropconfignameher:29,yourself:[7,29,30,40,41,44],yourusernam:40,yyyymmdd:35,zero:42,zip:30,zomg:[],zxvf:30},titles:["About Eggdrop","Boring legal stuff","Eggdrop, an open source IRC bot","Installing Eggdrop","README","Upgrading Eggdrop","Modules included with Eggdrop","Eggdrop Module Information","Assoc Module","Blowfish Module","Channels Module","Compress Module","Console Module","CTCP Module","DNS Module","Filesys Module","Ident Module","IRC Module","Notes Module","PBKDF2 Module","Seen Module","Server Module","Share Module","Transfer Module","Twitch Module","Uptime Module","Woobie Module","Writing an Eggdrop Module","Writing an Eggdrop Script","Common First Steps","Setting Up Eggdrop","Enabling TLS Security on Eggdrop","Account tracking in Eggdrop","Bans, Invites, and Exempts","Botnet Sharing and Linking","Eggdrop Core Settings","Eggdrop Features","IPv6 support","IRCv3 support","The Party Line","Patching Eggdrop","Encryption/Hashing","Eggdrop Tcl Commands","Textfile Substitutions","TLS support","Advanced Tips","Eggdrop Twitch Tcl Commands","Twitch","Users and Flags"],titleterms:{"default":45,"function":[27,47],"int":42,"new":42,"return":42,"short":30,"static":7,"super":30,Adding:34,DNS:14,TLS:[31,44],The:[30,39],Using:[32,34],about:[0,37,38,44],account2nick:42,account:[32,42],accounttrack:42,add:[29,42],addbot:42,addchanrec:42,addit:[27,31],address:42,addus:42,advanc:[35,45],api:24,arg1:42,arg2:42,arg:[42,46],argn:42,assign:29,assoc:[8,42],authent:[29,44],auto:4,automat:29,background:41,backup:42,ban:[33,42],banlist:42,banmask:42,base64:42,basic:35,best:32,bind:[42,46],block:42,blowfish:9,boot:42,bore:1,bot:[2,15,34,42],botattr:42,botflag:34,botishalfop:42,botisop:42,botisvoic:42,botlist:42,botnam:42,botnet:[5,31,34,35,44],botnick:42,botonchan:42,botport:42,bottre:34,callev:42,can:[2,7],cancel:15,cap:[38,42],capabl:[32,38],certif:44,chan:[42,46],chanban:42,chandname2nam:42,chanexempt:42,chanflag:42,chang:[5,42],chaninvit:42,chanlist:42,channame2dnam:42,channel:[10,15,29,42,46],chansettyp:42,charact:42,chat4:37,chat6:37,chat:37,chattr:42,check:32,chhandl:42,clear:15,clearqueu:42,cmd:46,command:[4,5,24,42,45,46],comment:42,common:29,commun:31,compil:7,compress:[11,42],compressfil:42,config:[5,15,30,42,45,47],configur:[29,30,31,41],configurearg:42,connect:[31,42],consol:[12,35,42],control:42,core:35,count:42,countus:42,creator:42,crontab:29,ctcp:[13,37],ctime:42,cygwin:3,dcc:[35,42,44],dccbroadcast:42,dccdumpfil:42,dcclist:42,dccputchan:42,dccsend:42,dccsimul:42,dccuse:42,decrypt:42,delchanrec:42,delhost:42,deludef:42,delus:42,desc:[15,42],descript:15,dest:15,destin:42,determin:32,develop:4,die:42,dir:[15,42],directori:[15,35,42],disclaim:47,dname:42,dnslookup:42,docker:4,document:[4,5],download:30,dst:15,dumpfil:42,durat:42,dynam:7,echo:42,edit:[30,47],effort:32,eggdrop:[0,2,3,4,5,6,7,27,28,29,30,31,32,35,36,40,42,46],enabl:[31,32,41,42],encpass:42,encrypt:[41,42],entri:42,erasenot:42,event:42,exampl:34,execut:35,exempt:[33,42],exemptlist:42,exemptmask:42,extend:32,extra:42,featur:36,file:[5,15,30,31,35,42,45,47],filemask:15,filenam:[15,42],filepath:15,fileresend:42,filesend:42,filesi:[15,42],filestat:15,find:2,findus:42,first:29,flag:[15,29,34,42,46,48],flushmod:42,formatstr:42,from:42,ftp:4,gener:31,get:[2,4,15,30,42],getaccount:42,getchan:42,getchanhost:42,getchanidl:42,getchaninfo:42,getchanjoin:42,getchanmod:42,getdccawai:42,getdccidl:42,getdesc:42,getdir:42,getfil:42,getfileq:42,getfilesendtim:42,getflag:42,getlink:42,getown:42,getpwd:42,getudef:42,getus:42,git:4,github:40,global:42,hand2idx:42,hand2nick:42,handl:42,handlen:42,handonchan:42,haschanrec:42,hash:41,help:[2,4],helpfil:42,hide:15,histori:30,host:[29,42],hostmask:42,hostnam:42,how:[2,4,5,7],hybrid:41,ident:16,idx2hand:42,idx:42,ignorelist:42,includ:6,info:42,inform:[7,31],instal:[2,3,7,30,37,44],interfac:41,invit:[33,42],invitelist:42,invitemask:42,ipv6:37,irc:[2,17,31,44,47],ircnick:42,ircv3:38,isawai:42,isban:42,isbansticki:42,isbotnick:42,ischanban:42,ischanexempt:42,ischaninvit:42,ischanjup:42,iscompress:42,isdynam:42,isexempt:42,isexemptsticki:42,ishalfop:42,isidentifi:42,isignor:42,isinvit:42,isinvitesticki:42,isircbot:42,isjup:42,islink:42,ismod:46,isop:42,ispermban:42,ispermexempt:42,isperminvit:42,isset:42,istl:42,isupport:42,isvip:46,isvoic:42,join:[29,32],jump:42,keep:45,kei:[31,42,44],keyword:42,killassoc:42,killban:42,killchanban:42,killchanexempt:42,killchaninvit:42,killdcc:42,killexempt:42,killignor:42,killinvit:42,killtim:42,killutim:42,languag:42,lastbind:42,legal:1,level:42,lifetim:42,limit:[24,42,47],line:[4,39],link:[34,42],list:42,listen:[31,42],listnot:42,loadchannel:42,loadhelp:42,loadmodul:[7,42],localfil:15,locat:30,log:[29,35,45],logfil:42,make:34,manipul:42,mask:42,maskhost:42,masktyp:42,match:42,matchaddr:42,matchattr:42,matchban:42,matchcidr:42,matchexempt:42,matchinvit:42,matchstr:42,md5:42,messag:42,method:29,minut:42,miscellan:42,mkdir:[15,42],mode:42,modifi:45,modul:[3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,35,42],modular:45,module_clos:27,module_expmem:27,module_report:27,module_start:27,module_t:27,monitor:42,more:2,msg:42,must:5,myip:42,name:42,need:7,newban:42,newchanban:42,newchanexempt:42,newchaninvit:42,newer:29,newexempt:42,newignor:42,newinvit:42,newnam:42,nick2hand:42,nick:[42,46],nicknam:[15,42],nickserv:29,note:[18,42],notic:4,notifi:32,numberlist:42,numvers:42,obtain:4,old:[29,42],oldnam:42,onchan:42,onchansplit:42,onelin:42,onlin:42,open:2,optim:15,option:42,output:42,own:[],parti:39,partylin:[15,24,29],pass:42,passwdok:42,password:42,patch:40,path:35,pattern:42,pbkdf2:19,pend:15,permiss:29,port:42,pre:[2,4,31],prefix:42,prepar:31,prerequisit:30,proc:42,procedur:42,protect:31,pushmod:42,putallbot:42,putbot:42,putcmdlog:42,putdcc:42,puthelp:42,putkick:42,putlog:42,putloglev:42,putnow:42,putquick:42,putserv:42,putxferlog:42,pwd:15,queue:42,queuesiz:42,quick:[3,4],quit:15,rand:42,raw:42,read:5,readm:4,reason:42,record:[34,42],refreshchan:42,regist:47,rehash:42,reload:42,reloadhelp:42,remov:42,renam:45,renudef:42,req:42,requir:[3,27,32,42],requisit:[2,4,31],resetban:42,resetchan:42,resetchanidl:42,resetchanjoin:42,resetconsol:42,resetexempt:42,resetinvit:42,restart:[29,42],rfcequal:42,rmdir:[15,42],roomstat:46,sasl:29,save:42,savechannel:42,script:[5,28,32,35,44],second:42,secur:[31,44],seen:20,self:45,sendnot:42,server:[21,31,32,42],serveraddress:42,set:[29,30,35,37,42,44],setchan:42,setchaninfo:42,setdccawai:42,setdesc:42,setflag:42,setlink:42,setown:42,setpwd:42,setudef:42,setup:15,setus:42,share:[15,22,34],show:30,snapshot:4,socklist:42,solo:41,some:2,sourc:[2,15,30],src:42,ssl:[35,44],stackabl:42,start:[4,30],starttl:42,startup:[3,4],stat:15,statu:[32,42],step:29,stickban:42,stickexempt:42,stickinvit:42,still:7,storenot:42,str:42,strftime:42,string1:42,string2:42,string:[42,45],strip:42,stripcod:42,stuff:1,submit:40,substitut:43,support:[32,37,38,44],system:[4,29],systemd:29,tag:[32,42],tagmsg:42,target:42,tcl:[5,24,32,41,42,46],tcp:42,telnet:35,term:34,text:42,textfil:43,thing:2,time:42,timer:42,timerid:[],timernam:42,tip:45,tlsstatu:42,topic:42,track:32,traffic:42,transfer:23,twcmd:46,twitch:[24,46,47],twitchmod:46,twitchvip:46,type:[42,46],unam:42,unbind:42,uncompressfil:42,unhid:15,unixtim:42,unlink:42,unloadhelp:42,unloadmodul:42,unshar:15,unstickban:42,unstickexempt:42,unstickinvit:42,upgrad:[4,5],uptim:[25,42],usag:[15,37,38,41,44],use:[],user:[15,29,34,42,48],userlist:42,userport:42,userst:46,utim:42,validchan:42,valididx:42,validus:42,valu:42,variabl:[42,45],version:[30,42],via:[40,42],washalfop:42,wasop:42,web:47,what:[4,7,27,34],where:2,whom:42,whox:32,why:[],window:3,without:7,woobi:26,write:[27,28],you:2,your:45}}) \ No newline at end of file diff --git a/doc/html/tutorials/firstscript.html b/doc/html/tutorials/firstscript.html index 7ddc58f93..fb00cb559 100644 --- a/doc/html/tutorials/firstscript.html +++ b/doc/html/tutorials/firstscript.html @@ -261,7 +261,7 @@

        Writing an Eggdrop Script © Copyright 2022, Eggheads. - Last updated on Nov 10, 2022. + Last updated on Dec 12, 2022. Created using Sphinx 1.8.5. diff --git a/doc/html/tutorials/firststeps.html b/doc/html/tutorials/firststeps.html index 4a8c80084..902477ae6 100644 --- a/doc/html/tutorials/firststeps.html +++ b/doc/html/tutorials/firststeps.html @@ -215,9 +215,29 @@

        Systemd Method (Newer Systems)Note the output at the end of the script informing you of the command you can use to start/stop the Eggdrop in thee future

        +
      22. Note the output at the end of the script informing you of the command you can use to start/stop the Eggdrop in thee future. For example, to manually start the Eggdrop, use:

        +
        systemctl --user start <botname>.service
        +
        +
      +

      To stop Eggdrop, use:

      +
      systemctl --user stop <botname>.service
      +
      +
      +

      To rehash (not reload) Eggdrop, use:

      +
      systemctl --user reload <botname>.service
      +
      +
      +

      (Yes, we acknowledge the confusion that the systemd reload command will execute the Eggdrop ‘.rehash’ command, not the ‘.reload’ command. Unfortunately, systemd did not consult us when choosing its commands!)

      +

      To prevent Eggdrop from automatically running after a system start, use:

      +
      systemctl --user disable <botname>.service
      +
      +
      +

      To re-enable Eggdrop automatically starting after a system start, use:

      +
      systemctl --user enable <botname>.service
      +
      +
      diff --git a/doc/html/tutorials/setup.html b/doc/html/tutorials/setup.html index d9c1bd41d..43e995a17 100644 --- a/doc/html/tutorials/setup.html +++ b/doc/html/tutorials/setup.html @@ -289,7 +289,7 @@

      No show? © Copyright 2022, Eggheads. - Last updated on Nov 10, 2022. + Last updated on Dec 12, 2022. Created using Sphinx 1.8.5. diff --git a/doc/html/tutorials/tlssetup.html b/doc/html/tutorials/tlssetup.html index 13f99eab0..fe5a6bd35 100644 --- a/doc/html/tutorials/tlssetup.html +++ b/doc/html/tutorials/tlssetup.html @@ -142,7 +142,7 @@

      Protecting Botnet Communications

      Configuration File Preparation - Generating Keys

      -

      If an Eggdrop is going to listen/accept connections on a TLS port (more on that in a moment), it must have a public/private certificate pair generated and configured. For most users, a self-signed certificate is sufficient for encryption (a certificate signed by a certificate authority would be more secure, but obtaining one is outside the scope of this tutorial. However, the implementatino of a signed keypair is no different than a self-signed pair). To generate a self-signed key pair, enter the Eggdrop source directory (the directory you first compiled Eggdrop from, usually named eggdrop-X.Y.Z) and type:

      +

      If an Eggdrop is going to listen/accept connections on a TLS port (more on that in a moment), it must have a public/private certificate pair generated and configured. For most users, a self-signed certificate is sufficient for encryption (a certificate signed by a certificate authority would be more secure, but obtaining one is outside the scope of this tutorial. However, the implementation of a signed keypair is no different than a self-signed pair). To generate a self-signed key pair, enter the Eggdrop source directory (the directory you first compiled Eggdrop from, usually named eggdrop-X.Y.Z) and type:

      make sslcert
       
      @@ -198,7 +198,7 @@

      Additional Information © Copyright 2022, Eggheads. - Last updated on Nov 10, 2022. + Last updated on Dec 12, 2022. Created using Sphinx 1.8.5. diff --git a/doc/html/using/accounts.html b/doc/html/using/accounts.html index 635bbd06d..d69a1a67d 100644 --- a/doc/html/using/accounts.html +++ b/doc/html/using/accounts.html @@ -207,7 +207,7 @@

      Using Accounts with Tcl Scripts © Copyright 2022, Eggheads. - Last updated on Nov 10, 2022. + Last updated on Dec 12, 2022. Created using Sphinx 1.8.5. diff --git a/doc/html/using/bans.html b/doc/html/using/bans.html index bccb67da2..a6ee03996 100644 --- a/doc/html/using/bans.html +++ b/doc/html/using/bans.html @@ -202,7 +202,7 @@

      Bans, Invites, and Exempts © Copyright 2022, Eggheads. - Last updated on Nov 10, 2022. + Last updated on Dec 12, 2022. Created using Sphinx 1.8.5. diff --git a/doc/html/using/botnet.html b/doc/html/using/botnet.html index 9d6abcc86..c7c43f83b 100644 --- a/doc/html/using/botnet.html +++ b/doc/html/using/botnet.html @@ -429,7 +429,7 @@

      Making bots share user records © Copyright 2022, Eggheads. - Last updated on Nov 10, 2022. + Last updated on Dec 12, 2022. Created using Sphinx 1.8.5. diff --git a/doc/html/using/core.html b/doc/html/using/core.html index 9e00c138e..1a4e7cd63 100644 --- a/doc/html/using/core.html +++ b/doc/html/using/core.html @@ -788,7 +788,7 @@

      Scripts © Copyright 2022, Eggheads. - Last updated on Nov 10, 2022. + Last updated on Dec 12, 2022. Created using Sphinx 1.8.5. diff --git a/doc/html/using/features.html b/doc/html/using/features.html index bd4ac4294..6c55f0f14 100644 --- a/doc/html/using/features.html +++ b/doc/html/using/features.html @@ -171,7 +171,7 @@

      Eggdrop Features © Copyright 2022, Eggheads. - Last updated on Nov 10, 2022. + Last updated on Dec 12, 2022. Created using Sphinx 1.8.5. diff --git a/doc/html/using/ipv6.html b/doc/html/using/ipv6.html index 2722906a9..ab3185ee5 100644 --- a/doc/html/using/ipv6.html +++ b/doc/html/using/ipv6.html @@ -201,7 +201,7 @@

      Settings © Copyright 2022, Eggheads. - Last updated on Nov 10, 2022. + Last updated on Dec 12, 2022. Created using Sphinx 1.8.5. diff --git a/doc/html/using/ircv3.html b/doc/html/using/ircv3.html index aaf08ba28..b4e56185d 100644 --- a/doc/html/using/ircv3.html +++ b/doc/html/using/ircv3.html @@ -170,7 +170,7 @@

      Supported CAP capabilities © Copyright 2022, Eggheads. - Last updated on Nov 10, 2022. + Last updated on Dec 12, 2022. Created using Sphinx 1.8.5. diff --git a/doc/html/using/partyline.html b/doc/html/using/partyline.html index 93dc1ec45..86da6a12d 100644 --- a/doc/html/using/partyline.html +++ b/doc/html/using/partyline.html @@ -158,7 +158,7 @@

      The Party Line © Copyright 2022, Eggheads. - Last updated on Nov 10, 2022. + Last updated on Dec 12, 2022. Created using Sphinx 1.8.5. diff --git a/doc/html/using/patch.html b/doc/html/using/patch.html index 063847d69..29159db2a 100644 --- a/doc/html/using/patch.html +++ b/doc/html/using/patch.html @@ -168,7 +168,7 @@

      Submitting a patch via GitHub © Copyright 2022, Eggheads. - Last updated on Nov 10, 2022. + Last updated on Dec 12, 2022. Created using Sphinx 1.8.5. diff --git a/doc/html/using/pbkdf2info.html b/doc/html/using/pbkdf2info.html index af1b55ee0..0fccdb074 100644 --- a/doc/html/using/pbkdf2info.html +++ b/doc/html/using/pbkdf2info.html @@ -219,7 +219,7 @@

      Tcl Interface © Copyright 2022, Eggheads. - Last updated on Nov 10, 2022. + Last updated on Dec 12, 2022. Created using Sphinx 1.8.5. diff --git a/doc/html/using/tcl-commands.html b/doc/html/using/tcl-commands.html index fdb2ea9c2..e91d30b1e 100644 --- a/doc/html/using/tcl-commands.html +++ b/doc/html/using/tcl-commands.html @@ -461,7 +461,7 @@

      botattr <handle> [changes [channel]] -

      matchattr <handle> <flags> [channel]

      +

      matchattr <handle> <flags> [channel]

      Description: checks if the flags of the specified user match the flags provided. “flags” is of the form:

      [+/-]<global flags>[&/|<channel flags>[&/|<bot flags>]]
      @@ -2866,7 +2866,7 @@ 

      Removing a bind

      Flag Masks

      -

      In the Bind Types section (and other commands, such as `matchattr`_), you will see several references to the “flags” argument. The “flags” argument takes a flag mask, which is a value that represents the type of user that is allowed to trigger the procedure associated to that bind. The flags can be any of the standard Eggdrop flags (o, m, v, etc). Additionally, when used by itself, a “-” or “*” can be used to skip processing for a flag type. A flag mask has three sections to it- global, channel, and bot flag sections. Each section is separated by the | or & logical operators ( the | means “OR” and the & means “AND; if nothing proceeds the flag then Eggdrop assumes it to be an OR). Additionally, a ‘+’ and ‘-‘ can be used in front of a flag to check if the user does (+) have it, or does not (-) have it.

      +

      In the Bind Types section (and other commands, such as matchattr), you will see several references to the “flags” argument. The “flags” argument takes a flag mask, which is a value that represents the type of user that is allowed to trigger the procedure associated to that bind. The flags can be any of the standard Eggdrop flags (o, m, v, etc). Additionally, when used by itself, a “-” or “*” can be used to skip processing for a flag type. A flag mask has three sections to it- global, channel, and bot flag sections. Each section is separated by the | or & logical operators ( the | means “OR” and the & means “AND; if nothing proceeds the flag then Eggdrop assumes it to be an OR). Additionally, a ‘+’ and ‘-‘ can be used in front of a flag to check if the user does (+) have it, or does not (-) have it.

      The easiest way to explain how to build a flag mask is by demonstration. A flag mask of “v” by itself means “has a global v flag”. To also check for a channel flag, you would use the flag mask “v|v”. This checks if the user has a global “v” flag, OR a channel “v” flag (again, the | means “OR” and ties the two types of flags together). You could change this mask to be “v&v”, which would check if the user has a global “v” flag AND a channel “v” flag. Lastly, to check if a user ONLY has a channel flag, you would use “*|v” as a mask, which would not check global flags but does check if the user had a channel “v” flag.

      You will commonly see flag masks for global flags written “ov”; this is the same as “|ov” or “*|ov”.

      Some additional examples:

      @@ -2929,7 +2929,7 @@

      Flag Masks|o). It is unknown where and why this practice started, but as a style tip, Eggdrop developers recommend using a ‘*’ to skip processing, so as not to confuse a single “-” meaning “skip processing” with a preceding “-ov” which means “not these flags”.

      +

      As a side note, Tcl scripts historically have used a ‘-‘ to skip processing of a flag type (Example: -|o). It is unknown where and why this practice started, but as a style tip, Eggdrop developers recommend using a ‘*’ to skip processing, so as not to confuse a single “-” meaning “skip processing” with a preceding “-ov” which means “not these flags”.

      diff --git a/doc/html/using/text-sub.html b/doc/html/using/text-sub.html index 2eb4ed8f4..a572b3cf6 100644 --- a/doc/html/using/text-sub.html +++ b/doc/html/using/text-sub.html @@ -234,7 +234,7 @@

      Textfile Substitutions © Copyright 2022, Eggheads. - Last updated on Nov 10, 2022. + Last updated on Dec 12, 2022. Created using Sphinx 1.8.5.

      diff --git a/doc/html/using/tls.html b/doc/html/using/tls.html index 09531799b..5d11e118d 100644 --- a/doc/html/using/tls.html +++ b/doc/html/using/tls.html @@ -326,7 +326,7 @@

      SSL/TLS Settings © Copyright 2022, Eggheads. - Last updated on Nov 10, 2022. + Last updated on Dec 12, 2022. Created using Sphinx 1.8.5. diff --git a/doc/html/using/tricks.html b/doc/html/using/tricks.html index a63929472..4d86301e0 100644 --- a/doc/html/using/tricks.html +++ b/doc/html/using/tricks.html @@ -175,7 +175,7 @@

      Variables in Your Config © Copyright 2022, Eggheads. - Last updated on Nov 10, 2022. + Last updated on Dec 12, 2022. Created using Sphinx 1.8.5. diff --git a/doc/html/using/twitch-tcl-commands.html b/doc/html/using/twitch-tcl-commands.html index c973faeb1..dde8df8f8 100644 --- a/doc/html/using/twitch-tcl-commands.html +++ b/doc/html/using/twitch-tcl-commands.html @@ -310,7 +310,7 @@

      Bind Types © Copyright 2022, Eggheads. - Last updated on Nov 10, 2022. + Last updated on Dec 12, 2022. Created using Sphinx 1.8.5. diff --git a/doc/html/using/twitchinfo.html b/doc/html/using/twitchinfo.html index 76ba167ed..1c3a2cca1 100644 --- a/doc/html/using/twitchinfo.html +++ b/doc/html/using/twitchinfo.html @@ -190,7 +190,7 @@

      Twitch IRC limitations © Copyright 2022, Eggheads. - Last updated on Nov 10, 2022. + Last updated on Dec 12, 2022. Created using Sphinx 1.8.5. diff --git a/doc/html/using/users.html b/doc/html/using/users.html index 174947f73..32c1fecc1 100644 --- a/doc/html/using/users.html +++ b/doc/html/using/users.html @@ -263,7 +263,7 @@

      Users and Flags © Copyright 2022, Eggheads. - Last updated on Nov 10, 2022. + Last updated on Dec 12, 2022. Created using Sphinx 1.8.5. diff --git a/doc/sphinx_source/using/tcl-commands.rst b/doc/sphinx_source/using/tcl-commands.rst index 2f9132808..904867221 100644 --- a/doc/sphinx_source/using/tcl-commands.rst +++ b/doc/sphinx_source/using/tcl-commands.rst @@ -367,6 +367,8 @@ botattr [changes [channel]] Module: core +.. _matchattr: + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ matchattr [channel] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -2890,7 +2892,7 @@ Flag Masks ^^^^^^^^^^ In the `Bind Types`_ section (and other commands, such as `matchattr`_), you will see several references to the "flags" argument. The "flags" argument takes a flag mask, which is a value that represents the type of user that is allowed to trigger the procedure associated to that bind. The flags can be any of the standard Eggdrop flags (o, m, v, etc). Additionally, when used by itself, a "-" or "*" can be used to skip processing for a flag type. A flag mask has three sections to it- global, channel, and bot flag sections. Each section is separated by the | or & logical operators ( the | means "OR" and the & means "AND; if nothing proceeds the flag then Eggdrop assumes it to be an OR). Additionally, a '+' and '-' can be used in front of a flag to check if the user does (+) have it, or does not (-) have it. -The easiest way to explain how to build a flag mask is by demonstration. A flag mask of "v" by itself means "has a global v flag". To also check for a channel flag, you would use the flag mask "v|v". This checks if the user has a global "v" flag, OR a channel "v" flag (again, the | means "OR" and ties the two types of flags together). You could change this mask to be "v&v", which would check if the user has a global "v" flag AND a channel "v" flag. Lastly, to check if a user ONLY has a channel flag, you would use "\*|v" as a mask, which would not check global flags but does check if the user had a channel "v" flag. +The easiest way to explain how to build a flag mask is by demonstration. A flag mask of "v" by itself means "has a global v flag". To also check for a channel flag, you would use the flag mask "v\|v". This checks if the user has a global "v" flag, OR a channel "v" flag (again, the | means "OR" and ties the two types of flags together). You could change this mask to be "v&v", which would check if the user has a global "v" flag AND a channel "v" flag. Lastly, to check if a user ONLY has a channel flag, you would use "\*|v" as a mask, which would not check global flags but does check if the user had a channel "v" flag. You will commonly see flag masks for global flags written "ov"; this is the same as "\|ov" or "\*\|ov". @@ -2932,7 +2934,7 @@ Some additional examples: | ||+b | Checks if the user has the bot flag b | +------------+-----------------------------------------------------------------+ -As a side note, Tcl scripts historically have used a '-' to skip processing of a flag type (Example: -|o). It is unknown where and why this practice started, but as a style tip, Eggdrop developers recommend using a '*' to skip processing, so as not to confuse a single "-" meaning "skip processing" with a preceding "-ov" which means "not these flags". +As a side note, Tcl scripts historically have used a '-' to skip processing of a flag type (Example: -\|o). It is unknown where and why this practice started, but as a style tip, Eggdrop developers recommend using a '\*' to skip processing, so as not to confuse a single "-" meaning "skip processing" with a preceding "-ov" which means "not these flags". ^^^^^^^^^^ Bind Types diff --git a/doc/tcl-commands.doc b/doc/tcl-commands.doc index 8b73f3b70..3436a91ba 100644 --- a/doc/tcl-commands.doc +++ b/doc/tcl-commands.doc @@ -2994,12 +2994,13 @@ the user does (+) have it, or does not (-) have it. The easiest way to explain how to build a flag mask is by demonstration. A flag mask of "v" by itself means "has a global v flag". To also check -for a channel flag, you would use the flag mask "v means "OR" and ties -the two types of flags together). You could change this mask to be -"v&v", which would check if the user has a global "v" flag AND a channel -"v" flag. Lastly, to check if a user ONLY has a channel flag, you would -use "*|v" as a mask, which would not check global flags but does check -if the user had a channel "v" flag. +for a channel flag, you would use the flag mask "v|v". This checks if +the user has a global "v" flag, OR a channel "v" flag (again, the | +means "OR" and ties the two types of flags together). You could change +this mask to be "v&v", which would check if the user has a global "v" +flag AND a channel "v" flag. Lastly, to check if a user ONLY has a +channel flag, you would use "*|v" as a mask, which would not check +global flags but does check if the user had a channel "v" flag. You will commonly see flag masks for global flags written "ov"; this is the same as "|ov" or "*|ov". From 90e8347314ef116f325020797be38cbf288551d0 Mon Sep 17 00:00:00 2001 From: Geo Date: Mon, 12 Dec 2022 17:46:05 -0500 Subject: [PATCH 136/201] dont forget this little guy --- doc/ACCOUNTS | 157 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 doc/ACCOUNTS diff --git a/doc/ACCOUNTS b/doc/ACCOUNTS new file mode 100644 index 000000000..aecd84ad5 --- /dev/null +++ b/doc/ACCOUNTS @@ -0,0 +1,157 @@ +Account tracking in Eggdrop + +In Eggdrop 1.9.3, Eggdrop added the ability to associate nicknames with +the service accounts they are logged into. It is IMPORTANT to note that +Eggdrop's ability to do this is dependent on an IRC server's +implementation of three features- the IRCv3 extended-join capability, +the IRCv3 account-notify capability, and WHOX support. All three of +these features must be supported by the server and, in the case of +extended-join and account-notify, requested by Eggdrop in order for +Eggdrop to maintain "perfect" association between nicknames and account +statuses. + +REQUIRED SERVER CAPABILITIES + +You're going to see this repeated a lot- the IRC server must support +three features in order for Eggdrop to accurately associate accounts +with nicknames. These three features allow Eggdrop to always know the +current association between an account and a nickname by getting account +statuses of users already on a channel when it joins, new users joining +a channel, and users who authenticate while on a channel. + +extended-join + +extended-join is an IRCv3-defined capability that adds the account name +of a user to the JOIN message sent by the IRC server, alerting clients +that a new member has joined a channel. Enabling this capability allows +Eggdrop to immediately determine the account name associated with a user +joining a channel + +account-notify + +account-notify is an IRCv3-defined capability that sends a message to a +channel when a member of the channel either authenticates or +deauthenticates from their account. Enabling this capability allows +Eggdrop to immediately associate an account to a channel member when +they authenticate or deauthenticate. + +WHOX + +'WHOX `_ is a server feature +that allows a client to request custom fields to be returned in a WHO +response. If a server supports this capability, Eggdrop sends a WHOX +query to the server when it joins a channel, allowing it to immediately +determine accounts associated with channel members when Eggdrop joins a +channel. + +ENABLING EGGDROP ACCOUNT TRACKING + +By default, the Eggdrop config file will attempt to enable all the +capabilities required for account tracking. There are two settings to +pay attention to : + + # To request the account-notify feature via CAP, set this to 1 + set account-notify 1 + + # To request the extended-join feature via CAP, set this to 1 + set extended-join 1 + +The ability of a server to support WHOX queries is determined via a +server's ISUPPORT (005) reply. If a server supports WHOX queries, +Eggdrop will automatically enable this feature. + +CHECKING ACCOUNT-TRACKING STATUS + +While Eggdrop is running, join the partyline and type .status. If +account-tracking is enabled (both the server supports and Eggdrop has +requested), you'll see this line : + + Loaded module information: + #eggdroptest : (not on channel) + Channels: #eggdroptest (trying) + Account tracking: Enabled <--- This line + Online as: BeerBot (BeerBot) + +Otherwise, the prompt will tell you which required capability is +missing/not enabled : + + Loaded module information: + #eggdroptest : 2 members, enforcing "+tn" (greet) + Channels: #eggdroptest (need ops) + Account tracking: Best-effort (Missing capabilities: extended-join, see .status all for details) <---- This line + Online as: Eggdrop (Eggdrop) + +DETERMINING IF A SERVER SUPPORTS ACCOUNT CAPABILITIES + +A server announces the capabilities it supports via a CAP request. If +you have Tcl enabled on the partyline (or via a raw message from a +client), you can send .tcl cap ls and see if the extended-join and +account-notify capabilities are supported by the server. If they are not +listed, the server does not support it. + +A server announces if it supports WHOX via its ISUPPORT (005) +announcement. If you have Tcl enabled on the partyline, you can send +.tcl issupport isset WHOX and if it returns '1', WHOX is supported by +the server. + +BEST-EFFORT ACCOUNT TRACKING + +If a server only supports some, but not all, of the required +capabilities, Eggdrop will switch to 'best effort' account tracking. +This means Eggdrop will update account statuses whenever it sees account +information, but in this mode Eggdrop cannot guarantee that all account +associations are up to date. + +If a server does not support extended-join, Eggdrop will not be able to +determine the account associated with a user when they join. Eggdrop can +update this information by sending a WHOX to the server. + +If a server does not support account-notify, Eggdrop will not be able to +determine the account associated with a user if they +authenticate/deauthenticate from their account after joining a channel. +Eggdrop can update this information by sending a WHOX to the server. + +If a server does not support WHOX, Eggdrop will not be able to determine +the accounts associated with users already on a channel before Eggdrop +joined. There is no reliable way to update this information. + +One workaround to significantly increase the accuracy of account +tracking for scripts in a 'best effort' scenario would be to issue a +WHOX query (assuming the server supports it), wait for the reply from +the server, and then query for the account information. + +account-tag + +One supplementary capability that can assist a best-effort account +tracking scenario is the IRCv3-defined account-tag capability. The +account-tag capability attaches a tag with the account name associated +with the user sending a command. Enabling this capability allows Eggdrop +to update its account tracking every time a user talks in channel, sets +a mode, sends a kick, etc. While still not able to offer the same level +of accuracy as enabling the "main three" account tracking features, it +can increase the overall accuracy of the account list. Additionally, +binds that react to user activity (pub, kick, mode, etc) containing +account-tag will update the internal account list prior to executing the +associated callback, so looking up the account name in the callback can +be considered accurate. + +USING ACCOUNTS WITH TCL SCRIPTS + +The Eggdrop Tcl ACCOUNT bind is triggered whenever an existing account +record stored by Eggdrop is modified, such as a user de/authenticating +to their account while in a channel, or information such as an +account-tag being seen that updates an existing user. However, the +ACCOUNT bind will NOT be triggered for the creation of a new user +record, such as a user joining a channel. The bind is triggered for +every channel the user is seen on- this means if a user is present with +Eggdrop on four channels, the bind will be executed four times, each +time with a different channel variable being passed to the associated +Tcl procedure. Additionally, in a best-effort account tracking +situation, Eggdrop will update the account associated with a user on all +channels, not just the channel the event is seen on (and thus resulting +in a bind trigger for each channel the user is on). + +In order to trigger Tcl script events to cover all instances where a +user logs in, you need to pair an ACCOUNT bind with a JOIN bind. This +will allow you to execute account-based events when a user joins as well +as if they authenticate after joining. From 6f4309cdfb82cf0763c27d30a3db75dc96e4a8ab Mon Sep 17 00:00:00 2001 From: Geo Date: Wed, 14 Dec 2022 21:10:46 -0500 Subject: [PATCH 137/201] Roll patchlevel --- NEWS | 2 +- src/version.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/NEWS b/NEWS index 6dfe4de3d..6af6b7bac 100644 --- a/NEWS +++ b/NEWS @@ -35,7 +35,7 @@ Eggdrop v1.9.4: - None Tcl API changes: - - Moved the 'gotmsg' function back as a raw bind. It was inadvertantly + - Moved the 'gotmsg' function back as a raw bind. It was inadvertently moved to a rawt bind in 1.9.3, causing issuse with scripts attempting to unbind this internal reference Module changes: diff --git a/src/version.h b/src/version.h index 202b920d1..8d09a999b 100644 --- a/src/version.h +++ b/src/version.h @@ -27,5 +27,5 @@ */ #define EGG_STRINGVER "1.9.4" -#define EGG_NUMVER 1090400 -#define EGG_PATCH "alpha" +#define EGG_NUMVER 1090403 +#define EGG_PATCH "base" From a10f405bf7870dd15fbb859089d2d8f10a35ceb2 Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sat, 17 Dec 2022 16:51:12 +0000 Subject: [PATCH 138/201] Use IRC_CHANGINGSERV Found by: primalz Patch by: michaelortmann Fixes: #1327 --- src/mod/irc.mod/msgcmds.c | 2 +- src/mod/server.mod/cmdsserv.c | 2 +- src/mod/server.mod/tclserv.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/mod/irc.mod/msgcmds.c b/src/mod/irc.mod/msgcmds.c index 4fa40e8a1..6f4e345f8 100644 --- a/src/mod/irc.mod/msgcmds.c +++ b/src/mod/irc.mod/msgcmds.c @@ -1101,7 +1101,7 @@ static int msg_jump(char *nick, char *host, struct userrec *u, char *par) putlog(LOG_CMDS, "*", "(%s!%s) !%s! JUMP", nick, host, u->handle); dprintf(-serv, "NOTICE %s :%s\n", nick, IRC_JUMP); cycle_time = 0; - nuke_server("changing servers"); + nuke_server(IRC_CHANGINGSERV); } else putlog(LOG_CMDS, "*", "(%s!%s) !%s! failed JUMP", nick, host, u->handle); return 1; diff --git a/src/mod/server.mod/cmdsserv.c b/src/mod/server.mod/cmdsserv.c index ae66204f7..1e5cbbaac 100644 --- a/src/mod/server.mod/cmdsserv.c +++ b/src/mod/server.mod/cmdsserv.c @@ -137,7 +137,7 @@ server, but Eggdrop was not compiled with SSL libraries. Skipping..."); putlog(LOG_CMDS, "*", "#%s# jump", dcc[idx].nick); dprintf(idx, "%s...\n", IRC_JUMP); cycle_time = 0; - nuke_server("changing servers"); + nuke_server(IRC_CHANGINGSERV); } static void cmd_clearqueue(struct userrec *u, int idx, char *par) diff --git a/src/mod/server.mod/tclserv.c b/src/mod/server.mod/tclserv.c index 30a6f96a0..5efbb056d 100644 --- a/src/mod/server.mod/tclserv.c +++ b/src/mod/server.mod/tclserv.c @@ -379,7 +379,7 @@ static int tcl_jump STDVAR } cycle_time = 0; - nuke_server("changing servers\n"); + nuke_server(IRC_CHANGINGSERV); return TCL_OK; } From 0e9c57ed6cb2d8f4a03b0c50377f60fef6600466 Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sat, 17 Dec 2022 16:52:28 +0000 Subject: [PATCH 139/201] Increase nouserfile output Found by: michaelortmann Patch by: michaelortmann --- src/chanprog.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/chanprog.c b/src/chanprog.c index 1256e9593..f5c5f6644 100644 --- a/src/chanprog.c +++ b/src/chanprog.c @@ -484,9 +484,9 @@ void chanprog() if (!readuserfile(userfile, &userlist)) { if (!make_userfile) { - char tmp[178]; + char tmp[256]; - egg_snprintf(tmp, sizeof tmp, MISC_NOUSERFILE, configfile); + snprintf(tmp, sizeof tmp, MISC_NOUSERFILE, configfile); fatal(tmp, 0); } printf("\n\n%s\n", MISC_NOUSERFILE2); From d2ac352f7d436315fb3aa4a5b14622ef2fc1d9ab Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sat, 17 Dec 2022 16:56:11 +0000 Subject: [PATCH 140/201] Fix sasl logging Found by: michaelortmann Patch by: michaelortmann --- src/mod/server.mod/servmsg.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/mod/server.mod/servmsg.c b/src/mod/server.mod/servmsg.c index 9b029f22b..e1f4a84c1 100644 --- a/src/mod/server.mod/servmsg.c +++ b/src/mod/server.mod/servmsg.c @@ -1520,7 +1520,7 @@ static int tryauthenticate(char *from, char *msg) ret = ECDSA_sign(0, dst, olen, sig, &siglen, eckey); EC_KEY_free(eckey); if (!ret) { - printf("SASL: AUTHENTICATE: ECDSA_sign() SSL error = %s\n", + putlog(LOG_SERV, "*", "SASL: AUTHENTICATE: ECDSA_sign() SSL error = %s\n", ERR_error_string(ERR_get_error(), 0)); nfree(sig); return 1; @@ -1536,8 +1536,8 @@ static int tryauthenticate(char *from, char *msg) dprintf(DP_MODE, "AUTHENTICATE %s\n", dst); #endif /* HAVE_EVP_PKEY_GET1_EC_KEY */ #else /* TLS */ - dprintf(LOG_DEBUG, "*", "SASL: Received EC message, but no TLS EC libs " - "present. Try PLAIN method"); + putlog(LOG_SERV, "*", "SASL: Received EC message, but no TLS EC libs " + "present. Try PLAIN method"); return 1; #endif /* TLS */ } From aa214164bc14e1f9adc10734176235f2682b949e Mon Sep 17 00:00:00 2001 From: Geo Date: Sat, 17 Dec 2022 14:10:44 -0500 Subject: [PATCH 141/201] Update patchlevel 'logupdates' --- src/version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/version.h b/src/version.h index 8d09a999b..5111478ae 100644 --- a/src/version.h +++ b/src/version.h @@ -27,5 +27,5 @@ */ #define EGG_STRINGVER "1.9.4" -#define EGG_NUMVER 1090403 -#define EGG_PATCH "base" +#define EGG_NUMVER 1090404 +#define EGG_PATCH "logupdates" From 6bec2d698c3c615dc5a1fca43a97affadc651cca Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sat, 17 Dec 2022 19:11:33 +0000 Subject: [PATCH 142/201] increase logfile length --- src/tclmisc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tclmisc.c b/src/tclmisc.c index 801ee4bce..f39e13322 100644 --- a/src/tclmisc.c +++ b/src/tclmisc.c @@ -73,7 +73,7 @@ int expmem_tclmisc() static int tcl_logfile STDVAR { int i; - char s[151]; + char s[256]; BADARGS(1, 4, " ?logModes channel logFile?"); @@ -81,7 +81,7 @@ static int tcl_logfile STDVAR /* They just want a list of the logfiles and modes */ for (i = 0; i < max_logs; i++) if (logs[i].filename != NULL) { - egg_snprintf(s, sizeof s, "%s %s %s", masktype(logs[i].mask), + snprintf(s, sizeof s, "%s %s %s", masktype(logs[i].mask), logs[i].chname, logs[i].filename); Tcl_AppendElement(interp, s); } From e3983abc36160237ba469478d52d567deb12147b Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Mon, 19 Dec 2022 15:41:20 +0000 Subject: [PATCH 143/201] Fix some year 2038 problems Found by: michaelortmann Patch by: michaelortmann and thommey Fix time_t handling (buffer size, type and format specifier) POSIX requires time_t to be an integer type, but does not mandate that it be signed or unsigned. time_t to string conversion used buffersize 11, 10 chars + NULL-terminator, would overflow with unixtime >9999999999 (year 2286) --- src/botcmd.c | 4 ++-- src/dns.c | 2 +- src/main.c | 5 +++-- src/mod/blowfish.mod/blowfish.c | 2 +- src/mod/channels.mod/tclchan.c | 14 +++----------- src/mod/irc.mod/cmdsirc.c | 18 +++++++++--------- src/mod/irc.mod/tclirc.c | 4 ++-- src/mod/share.mod/share.c | 7 ++++--- src/tcldcc.c | 18 ++++++------------ src/tclmisc.c | 4 ++-- src/tcluser.c | 12 +++--------- src/userrec.c | 6 +++--- 12 files changed, 39 insertions(+), 57 deletions(-) diff --git a/src/botcmd.c b/src/botcmd.c index 2757026a1..60871b197 100644 --- a/src/botcmd.c +++ b/src/botcmd.c @@ -837,8 +837,8 @@ static void bot_traced(int idx, char *par) if (*c == ':') j++; } - dprintf(i, "%s -> %s (%lu secs, %d hop%s)\n", BOT_TRACERESULT, p, - now - t, j, (j != 1) ? "s" : ""); + dprintf(i, "%s -> %s (%" PRId64 " secs, %d hop%s)\n", BOT_TRACERESULT, + p, (int64_t) (now - t), j, (j != 1) ? "s" : ""); } else dprintf(i, "%s -> %s\n", BOT_TRACERESULT, p); } diff --git a/src/dns.c b/src/dns.c index 6d5c67f79..48454742b 100644 --- a/src/dns.c +++ b/src/dns.c @@ -86,7 +86,7 @@ static void eof_dcc_dnswait(int idx) static void display_dcc_dnswait(int idx, char *buf) { - sprintf(buf, "dns waited %lis", (long) (now - dcc[idx].timeval)); + sprintf(buf, "dns waited %" PRId64 "s", (int64_t) (now - dcc[idx].timeval)); } static int expmem_dcc_dnswait(void *x) diff --git a/src/main.c b/src/main.c index d4bee020c..7fff6c6fe 100644 --- a/src/main.c +++ b/src/main.c @@ -651,13 +651,14 @@ static void core_secondly() /* In case for some reason more than 1 min has passed: */ while (nowmins != lastmin) { /* Timer drift, dammit */ - debug1("timer: drift (%f seconds)", difftime(nowmins, lastmin)); + debug1("timer: drift (%" PRId64 " seconds)", (int64_t) (nowmins - lastmin)); i++; ++lastmin; call_hook(HOOK_MINUTELY); } if (i > 1) - putlog(LOG_MISC, "*", "(!) timer drift -- spun %f minutes", difftime(nowmins, lastmin)/60); + putlog(LOG_MISC, "*", "(!) timer drift -- spun %" PRId64 " minutes", + ((int64_t) (nowmins - lastmin)) / 60); miltime = (nowtm.tm_hour * 100) + (nowtm.tm_min); if (((int) (nowtm.tm_min / 5) * 5) == (nowtm.tm_min)) { /* 5 min */ call_hook(HOOK_5MINUTELY); diff --git a/src/mod/blowfish.mod/blowfish.c b/src/mod/blowfish.mod/blowfish.c index af03c8f1a..867efc30d 100644 --- a/src/mod/blowfish.mod/blowfish.c +++ b/src/mod/blowfish.mod/blowfish.c @@ -153,7 +153,7 @@ static void blowfish_report(int idx, int details) dprintf(idx, " %d of %d boxes in use:", tot, BOXES); for (i = 0; i < BOXES; i++) if (box[i].P != NULL) { - dprintf(idx, " (age: %f)", difftime(now, box[i].lastuse)); + dprintf(idx, " (age: %" PRId64 ")", (int64_t) (now - box[i].lastuse)); } dprintf(idx, "\n"); } diff --git a/src/mod/channels.mod/tclchan.c b/src/mod/channels.mod/tclchan.c index 06b33b8d3..7f13f6197 100644 --- a/src/mod/channels.mod/tclchan.c +++ b/src/mod/channels.mod/tclchan.c @@ -1720,25 +1720,17 @@ static int tcl_channel_modify(Tcl_Interp *irp, struct chanset_t *chan, static int tcl_do_masklist(maskrec *m, Tcl_Interp *irp) { char ts[21], ts1[21], ts2[21], *p; - long tv; EGG_CONST char *list[6]; for (; m; m = m->next) { list[0] = m->mask; list[1] = m->desc; - - tv = m->expire; - sprintf(ts, "%lu", tv); + snprintf(ts, sizeof ts, "%" PRId64, (int64_t) m->expire); list[2] = ts; - - tv = m->added; - sprintf(ts1, "%lu", tv); + snprintf(ts1, sizeof ts1, "%" PRId64, (int64_t) m->added); list[3] = ts1; - - tv = m->lastactive; - sprintf(ts2, "%lu", tv); + snprintf(ts2, sizeof ts2, "%" PRId64, (int64_t) m->lastactive); list[4] = ts2; - list[5] = m->user; p = Tcl_Merge(6, list); Tcl_AppendElement(irp, p); diff --git a/src/mod/irc.mod/cmdsirc.c b/src/mod/irc.mod/cmdsirc.c index 66179ba6d..ccbb75657 100644 --- a/src/mod/irc.mod/cmdsirc.c +++ b/src/mod/irc.mod/cmdsirc.c @@ -853,21 +853,21 @@ static void cmd_channel(struct userrec *u, int idx, char *par) else chanflag = ' '; if (chan_issplit(m)) { - dprintf(idx, "%c%-*s %-*s %-*s %-6s %c <- netsplit, %fs\n", - chanflag, maxnicklen, m->nick, maxhandlen, handle, maxnicklen, - m->account, s, atrflag, difftime(now, m->split)); + dprintf(idx, "%c%-*s %-*s %-*s %-6s %c <- netsplit, %" PRId64 "s\n", + chanflag, maxnicklen, m->nick, maxhandlen, handle, maxnicklen, + m->account, s, atrflag, (int64_t) (now - m->split)); } else if (!rfc_casecmp(m->nick, botname)) { - dprintf(idx, "%c%-*s %-*s %-*s %-6s %c <- it's me!\n", chanflag, - maxnicklen, m->nick, maxhandlen, handle, maxnicklen, m->account, - s, atrflag); + dprintf(idx, "%c%-*s %-*s %-*s %-6s %c <- it's me!\n", + chanflag, maxnicklen, m->nick, maxhandlen, handle, maxnicklen, + m->account, s, atrflag); } else { /* Determine idle time */ if (now - (m->last) > 86400) - egg_snprintf(s1, sizeof s1, "%2lud", ((now - (m->last)) / 86400)); + snprintf(s1, sizeof s1, "%2" PRId64 "d", ((int64_t) (now - m->last)) / 86400); else if (now - (m->last) > 3600) - egg_snprintf(s1, sizeof s1, "%2luh", ((now - (m->last)) / 3600)); + snprintf(s1, sizeof s1, "%2" PRId64 "h", ((int64_t) (now - m->last)) / 3600); else if (now - (m->last) > 180) - egg_snprintf(s1, sizeof s1, "%2lum", ((now - (m->last)) / 60)); + snprintf(s1, sizeof s1, "%2" PRId64 "m", ((int64_t) (now - m->last)) / 60); else strlcpy(s1, " ", sizeof s1); if (chan_ircaway(m)) { diff --git a/src/mod/irc.mod/tclirc.c b/src/mod/irc.mod/tclirc.c index ea5bef5fe..0b6abd416 100644 --- a/src/mod/irc.mod/tclirc.c +++ b/src/mod/irc.mod/tclirc.c @@ -690,13 +690,13 @@ static int tcl_getchanidle STDVAR static int tcl_chanmasks(masklist *m, Tcl_Interp *irp) { - char work[20], *p; + char work[21], *p; EGG_CONST char *list[3]; for (; m && m->mask && m->mask[0]; m = m->next) { list[0] = m->mask; list[1] = m->who; - simple_sprintf(work, "%d", now - m->timer); + snprintf(work, sizeof work, "%" PRId64, (int64_t) (now - m->timer)); list[2] = work; p = Tcl_Merge(3, list); Tcl_AppendElement(irp, p); diff --git a/src/mod/share.mod/share.c b/src/mod/share.mod/share.c index 57d4c3292..dc8a1f1c7 100644 --- a/src/mod/share.mod/share.c +++ b/src/mod/share.mod/share.c @@ -1232,7 +1232,8 @@ static void share_ufsend(int idx, char *par) int i, sock; FILE *f; - egg_snprintf(s, sizeof s, ".share.%s.%li.users", botnetnick, now); + snprintf(s, sizeof s, ".share.%s.%" PRId64 ".users", botnetnick, + (int64_t) now); if (!(b_status(idx) & STAT_SHARE)) { dprintf(idx, "s e You didn't ask; you just started sending.\n"); dprintf(idx, "s e Ask before sending the userfile.\n"); @@ -2038,8 +2039,8 @@ static void start_sending_users(int idx) struct chanset_t *cst; char s[EGG_INET_ADDRSTRLEN]; - egg_snprintf(share_file, sizeof share_file, ".share.%s.%lu", dcc[idx].nick, - now); + snprintf(share_file, sizeof share_file, ".share.%s.%" PRId64, dcc[idx].nick, + (int64_t) now); if (dcc[idx].u.bot->uff_flags & UFF_OVERRIDE) { debug1("NOTE: Sharing aggressively with %s, overriding its local bots.", dcc[idx].nick); diff --git a/src/tcldcc.c b/src/tcldcc.c index 6a7702b29..3fd96e0f0 100644 --- a/src/tcldcc.c +++ b/src/tcldcc.c @@ -702,9 +702,8 @@ static void build_sock_list(Tcl_Interp *irp, Tcl_Obj *masterlist, char *idxstr, /* Gather information for dcclist or socklist */ static void dccsocklist(Tcl_Interp *irp, int argc, char *type, int src) { int i; - char idxstr[10], timestamp[11], other[160]; + char idxstr[10], timestamp[21], other[160]; char portstring[7]; /* ssl + portmax + NULL */ - long tv; char s[EGG_INET_ADDRSTRLEN]; socklen_t namelen; struct sockaddr_storage ss; @@ -718,8 +717,7 @@ static void dccsocklist(Tcl_Interp *irp, int argc, char *type, int src) { if (argc == 1 || ((argc == 2) && (dcc[i].type && !strcasecmp(dcc[i].type->name, type)))) { egg_snprintf(idxstr, sizeof idxstr, "%ld", dcc[i].sock); - tv = dcc[i].timeval; - egg_snprintf(timestamp, sizeof timestamp, "%ld", tv); + snprintf(timestamp, sizeof timestamp, "%" PRId64, (int64_t) dcc[i].timeval); if (dcc[i].type && dcc[i].type->display) dcc[i].type->display(i, other); else { @@ -785,8 +783,7 @@ static int tcl_dcclist STDVAR static int tcl_whom STDVAR { int chan, i; - char c[2], idle[32], work[20], *p; - long tv = 0; + char c[2], idle[21], work[20], *p; EGG_CONST char *list[7]; BADARGS(2, 2, " chan"); @@ -815,8 +812,7 @@ static int tcl_whom STDVAR if (dcc[i].u.chat->channel == chan || chan == -1) { c[0] = geticon(i); c[1] = 0; - tv = (now - dcc[i].timeval) / 60; - egg_snprintf(idle, sizeof idle, "%li", tv); + snprintf(idle, sizeof idle, "%" PRId64, (int64_t) ((now - dcc[i].timeval) / 60)); list[0] = dcc[i].nick; list[1] = botnetnick; list[2] = dcc[i].host; @@ -838,10 +834,8 @@ static int tcl_whom STDVAR c[1] = 0; if (party[i].timer == 0L) strcpy(idle, "0"); - else { - tv = (now - party[i].timer) / 60; - egg_snprintf(idle, sizeof idle, "%li", tv); - } + else + snprintf(idle, sizeof idle, "%" PRId64, (int64_t) ((now - party[i].timer) / 60)); list[0] = party[i].nick; list[1] = party[i].bot; list[2] = party[i].from ? party[i].from : ""; diff --git a/src/tclmisc.c b/src/tclmisc.c index f39e13322..f1270bc8d 100644 --- a/src/tclmisc.c +++ b/src/tclmisc.c @@ -404,12 +404,12 @@ static int tcl_duration STDVAR static int tcl_unixtime STDVAR { - char s[11]; + char s[21]; time_t now2 = time(NULL); BADARGS(1, 1, ""); - egg_snprintf(s, sizeof s, "%li", (long) now2); + snprintf(s, sizeof s, "%" PRId64, (int64_t) now2); Tcl_AppendResult(irp, s, NULL); return TCL_OK; } diff --git a/src/tcluser.c b/src/tcluser.c index 987a0e6dc..e94334ded 100644 --- a/src/tcluser.c +++ b/src/tcluser.c @@ -611,8 +611,7 @@ static int tcl_killignore STDVAR static int tcl_ignorelist STDVAR { - char expire[11], added[11], *p; - long tv; + char expire[21], added[21], *p; EGG_CONST char *list[5]; struct igrec *i; @@ -621,15 +620,10 @@ static int tcl_ignorelist STDVAR for (i = global_ign; i; i = i->next) { list[0] = i->igmask; list[1] = i->msg; - - tv = i->expire; - egg_snprintf(expire, sizeof expire, "%lu", tv); + snprintf(expire, sizeof expire, "%" PRId64, (int64_t) i->expire); list[2] = expire; - - tv = i->added; - egg_snprintf(added, sizeof added, "%lu", tv); + snprintf(added, sizeof added, "%" PRId64, (int64_t) i->added); list[3] = added; - list[4] = i->user; p = Tcl_Merge(5, list); Tcl_AppendElement(irp, p); diff --git a/src/userrec.c b/src/userrec.c index 9a8f19f49..fce760230 100644 --- a/src/userrec.c +++ b/src/userrec.c @@ -656,7 +656,7 @@ struct userrec *adduser(struct userrec *bu, char *handle, char *host, struct userrec *u, *x; struct xtra_key *xk; int oldshare = noshare; - long tv; + time_t tv; noshare = 1; u = nmalloc(sizeof *u); @@ -680,9 +680,9 @@ struct userrec *adduser(struct userrec *bu, char *handle, char *host, xk->key = nmalloc(8); strcpy(xk->key, "created"); tv = now; - l = snprintf(NULL, 0, "%li", tv); + l = snprintf(NULL, 0, "%" PRId64, (int64_t) tv); xk->data = nmalloc(l + 1); - sprintf(xk->data, "%li", tv); + sprintf(xk->data, "%" PRId64, (int64_t) tv); set_user(&USERENTRY_XTRA, u, xk); } /* Strip out commas -- they're illegal */ From 5cec6dbed0d6c68ac157e1da78d76d9d2cf28941 Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Mon, 19 Dec 2022 15:43:19 +0000 Subject: [PATCH 144/201] Update BUG-REEPORT --- doc/BUG-REPORT | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/doc/BUG-REPORT b/doc/BUG-REPORT index f1ceda1e8..3c279c599 100644 --- a/doc/BUG-REPORT +++ b/doc/BUG-REPORT @@ -26,7 +26,7 @@ DO NOT SEND HTML E-MAIL TO THE LISTS. 1) INFORMATION ABOUT YOUR EGGDROP 1.1) Eggdrop version: - 1.8.__ + 1.9._ 1.2) Make type: ( ) dynamic @@ -42,17 +42,13 @@ DO NOT SEND HTML E-MAIL TO THE LISTS. 2) INFORMATION ABOUT TCL 2.1) Tcl library version: - ( ) 8.3 - ( ) 8.4 - ( ) 8.5 - ( ) 8.6 + ( ) 8.3._ + ( ) 8.4._ + ( ) 8.5._ + ( ) 8.6._ ( ) Other - Which? ____ -2.2) Tcl library patchlevel: ___ - eg; p1, p2, etc for Tcl versions up to 8.0p2 - or the 3rd part of the version number for 8.0.3 and newer - -2.3) Tcl scripts used: +2.2) Tcl scripts used: [ ] alltools [ ] sentinel [ ] getops @@ -81,6 +77,7 @@ DO NOT SEND HTML E-MAIL TO THE LISTS. ( ) SINIX ( ) Solaris/SunOS/OpenIndiana ( ) Ultrix + ( ) Windows Subsystem for Linux (WSL) ( ) Other - Which? _____________ 3.2) OS Version/Release: _____________ @@ -110,8 +107,10 @@ DO NOT SEND HTML E-MAIL TO THE LISTS. useful if you could paste gdb's output during the following steps: First call gdb $ gdb eggdrop -c core + (systemd users could try coredumpctl) and then enter 'bt' on gdb's command line: (gdb) bt + (even more information could be obtained with 'bt full') Keep your core file for at least one week, so that the dev team can ask for further information if needed. However, don't send us the core file unless we ask for it. From 6eee0f54a7d53304321c42c506a6f58b7e69e376 Mon Sep 17 00:00:00 2001 From: Geo Date: Mon, 19 Dec 2022 15:39:27 -0500 Subject: [PATCH 145/201] Only update bothost on own chghost Found by: Geo Patch by: Geo Eggdrop incorrectly updated its own internally-tracked hostname with any host in a CHGHOST, whether it was intended for Eggdrop or not. --- src/mod/server.mod/servmsg.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/mod/server.mod/servmsg.c b/src/mod/server.mod/servmsg.c index e1f4a84c1..5bb4f31d2 100644 --- a/src/mod/server.mod/servmsg.c +++ b/src/mod/server.mod/servmsg.c @@ -1320,7 +1320,9 @@ static int got396orchghost(char *nick, char *user, char *uhost) m = ismember(chan, nick); if (m) { snprintf(m->userhost, sizeof m->userhost, "%s@%s", user, uhost); - strcpy(botuserhost, m->userhost); + if (!rfc_casecmp(m->nick, botname)) { + strcpy(botuserhost, m->userhost); + } } } return 0; From 22586b4dc9fd9fde5b5d0c97ec7d435a200937ae Mon Sep 17 00:00:00 2001 From: Simon Lyngshede Date: Fri, 30 Dec 2022 20:03:45 +0100 Subject: [PATCH 146/201] Fix doc links to binds Patch by: @slyngshede --- doc/html/tutorials/firstscript.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/html/tutorials/firstscript.html b/doc/html/tutorials/firstscript.html index fb00cb559..7097af445 100644 --- a/doc/html/tutorials/firstscript.html +++ b/doc/html/tutorials/firstscript.html @@ -113,7 +113,7 @@

      Writing an Eggdrop Scriptcore Tcl language commands, especially the string- and list-related commands, as well as Eggdrop’s own library of custom Tcl commands, located in tcl-commands.doc

      +get familiar with the core Tcl language commands, especially the string- and list-related commands, as well as Eggdrop’s own library of custom Tcl commands, located in tcl-commands.doc

      If you have the .tcl command enabled, you can load a script by typing ‘.tcl source script/file.tcl’ to load it. Otherwise, add it to your config file like normal (examples to do so are at the bottom of the config file) and @@ -176,7 +176,7 @@

      Writing an Eggdrop Script
      bind join - * greet
       
      -

      This is a bind. This sets up an action that Eggdrop will react to. You can read all the binds that Eggdrop uses here. Generally, we like to place all binds towards the top of the script so that they are together and easy to find. Now, let’s look at documentation of the bind join together.

      +

      This is a bind. This sets up an action that Eggdrop will react to. You can read all the binds that Eggdrop uses here. Generally, we like to place all binds towards the top of the script so that they are together and easy to find. Now, let’s look at documentation of the bind join together.

      @@ -270,4 +270,4 @@

      Writing an Eggdrop Script Date: Sun, 12 Feb 2023 14:11:49 -0500 Subject: [PATCH 149/201] Update Tcl repo Found by: @robert-scheck Fixes: #1379 Confirmed with Tcl devs that they no longer maintain the FTP; updating suggested download repo in configure. --- configure | 4 ++-- configure.ac | 2 +- src/mod/compress.mod/configure | 2 +- src/mod/dns.mod/configure | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/configure b/configure index b7e1fb352..7372012d6 100755 --- a/configure +++ b/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.ac 13ab0170. +# From configure.ac 533f882a. # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for Eggdrop 1.9.4. # @@ -7985,7 +7985,7 @@ rm -f conftest.mmap conftest.txt # Tcl version to recommend if no Tcl is found, and the site where it can be # found for download. tclrecommendver="8.6.X" -tclrecommendsite="ftp://ftp.tcl.tk/pub/tcl/tcl8_6/" +tclrecommendsite="https://sourceforge.net/projects/tcl/files/Tcl/" # Tcl header filenames. tclheadernames="tcl.h" diff --git a/configure.ac b/configure.ac index f6c66bbae..c101fedf0 100644 --- a/configure.ac +++ b/configure.ac @@ -122,7 +122,7 @@ AC_FUNC_MMAP # Tcl version to recommend if no Tcl is found, and the site where it can be # found for download. tclrecommendver="8.6.X" -tclrecommendsite="ftp://ftp.tcl.tk/pub/tcl/tcl8_6/" +tclrecommendsite="https://sourceforge.net/projects/tcl/files/Tcl/" # Tcl header filenames. tclheadernames="tcl.h" diff --git a/src/mod/compress.mod/configure b/src/mod/compress.mod/configure index 29f9f2adc..3ea939674 100755 --- a/src/mod/compress.mod/configure +++ b/src/mod/compress.mod/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.ac 13ab0170. +# From configure.ac 533f882a. # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for Eggdrop Compress Module 1.9.4. # diff --git a/src/mod/dns.mod/configure b/src/mod/dns.mod/configure index 00072f073..84e203692 100755 --- a/src/mod/dns.mod/configure +++ b/src/mod/dns.mod/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.ac 13ab0170. +# From configure.ac 533f882a. # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for Eggdrop DNS Module 1.9.4. # From 0406c4b5ba42ac0a7e2a891b7267c845f1775fea Mon Sep 17 00:00:00 2001 From: Geo Date: Sun, 12 Feb 2023 14:12:47 -0500 Subject: [PATCH 150/201] Add TLS doc link to botnet doc Found by: @ZarTek-Creole Fixes: #1396 --- doc/sphinx_source/using/botnet.rst | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/doc/sphinx_source/using/botnet.rst b/doc/sphinx_source/using/botnet.rst index 7dea0d324..6757598b5 100644 --- a/doc/sphinx_source/using/botnet.rst +++ b/doc/sphinx_source/using/botnet.rst @@ -1,5 +1,4 @@ Botnet Sharing and Linking -Last revised: Nov 09, 2017 ========================== Botnet Sharing and Linking @@ -150,6 +149,10 @@ Here is an example scenario: At this point, you can link the two bots by typing '.link BotA' on BotB (or '.link BotB' on BotA). The bots will now give themselves random passwords which are *not* stored encrypted in the userfile. Note that you can link as many bots as you wish to your botnet. +Secure (TLS) Links +^^^^^^^^^^^^^^^^^^ +Since Eggdrop 1.8.0, the ability to encrypt bot links using TLS is possible. On the hub bot you would prefix the port given in the `listen` command with a +, and when you add the hub bot to the leaf, you would prefix the port used in the `.+bot` command with a +. In other words, you would set `listen +5555` in the hub config and use `.+bot hubbot 1.2.3.4 +5555` on the leaf bot. These settings are explained more thoroughly in the `TLS botnet documentation. `_ + Using botflags -------------- @@ -315,4 +318,8 @@ Making bots share user records |-+beldin `-+Lameshare +Using certificates to authenticate Eggdrops +------------------------------------------- +Eggdrops can use certificates to authenticate when linking to each other instead of a password. First, you must ensure you have set the appropriate certificates in the `ssl-privatekey` and `ssl-certificate` settings in the config file, and then enable the `ssl-cert-auth` setting. Next, add the certificate on the partyline by using `.fprint +` to add the fingerprint for the certificate currently in use, or `.fprint ` to manually add a fingerprint. Once the config file settings are set 0and fingerprints are added on the partyline, Eggdrops will attempt to use their certificates intead of passwords for authentication. + Copyright (C) 1999 - 2022 Eggheads Development Team From 7c6905000b8e0d8cdb65a4951efaae1977d684e5 Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sun, 12 Feb 2023 19:15:00 +0000 Subject: [PATCH 151/201] Fix Twitch mod crash Found by: Lord255 Patch by: michaelortmann Fixes: #1380 --- src/mod/twitch.mod/twitch.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/mod/twitch.mod/twitch.c b/src/mod/twitch.mod/twitch.c index 7efc8cc71..542d5c3a9 100644 --- a/src/mod/twitch.mod/twitch.c +++ b/src/mod/twitch.mod/twitch.c @@ -843,6 +843,7 @@ static char *twitch_close() del_bind_table(H_rmst); del_bind_table(H_usst); del_bind_table(H_usrntc); + Tcl_UntraceVar(interp, "keep-nick", TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, traced_keepnick, NULL); module_undepend(MODULE_NAME); return NULL; } From 156c99d3bf7af1bec3291f12d1a6b20a23dad946 Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sun, 12 Feb 2023 19:18:39 +0000 Subject: [PATCH 152/201] Make init_threaddata() return void Patch by: michaelortmann --- src/main.c | 2 +- src/proto.h | 2 +- src/tcl.c | 3 +-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main.c b/src/main.c index 7fff6c6fe..9ab60c6de 100644 --- a/src/main.c +++ b/src/main.c @@ -778,7 +778,7 @@ void check_static(char *, char *(*)()); #include "mod/static.h" #endif -int init_threaddata(int); +void init_threaddata(int); int init_mem(); int init_userent(); int init_misc(); diff --git a/src/proto.h b/src/proto.h index 054fe204d..f1940773b 100644 --- a/src/proto.h +++ b/src/proto.h @@ -302,7 +302,7 @@ void safe_write(int, const void *, size_t); /* tcl.c */ struct threaddata *threaddata(void); -int init_threaddata(int); +void init_threaddata(int); void protect_tcl(void); void unprotect_tcl(void); void do_tcl(char *, char *); diff --git a/src/tcl.c b/src/tcl.c index 770dbacbb..3e6265ae2 100644 --- a/src/tcl.c +++ b/src/tcl.c @@ -620,7 +620,7 @@ struct threaddata *threaddata() #endif /* REPLACE_NOTIFIER */ -int init_threaddata(int mainthread) +void init_threaddata(int mainthread) { struct threaddata *td = threaddata(); /* Nested evaluation (vwait/update) of the event loop only @@ -636,7 +636,6 @@ int init_threaddata(int mainthread) td->blocktime.tv_usec = 0; td->MAXSOCKS = 0; increase_socks_max(); - return 0; } /* Not going through Tcl's crazy main() system (what on earth was he From b06f20a951cbc1bd9d01bd737a85cac5314e4ba0 Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sun, 12 Feb 2023 19:19:07 +0000 Subject: [PATCH 153/201] Cleanup: unused but set variable Patch by: michaelortmann --- src/mod/channels.mod/tclchan.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/mod/channels.mod/tclchan.c b/src/mod/channels.mod/tclchan.c index 7f13f6197..8f6b1c926 100644 --- a/src/mod/channels.mod/tclchan.c +++ b/src/mod/channels.mod/tclchan.c @@ -2282,7 +2282,7 @@ static int tcl_deludef STDVAR static int tcl_getudefs STDVAR { struct udef_struct *ul; - int type = 0, count = 0; + int type = 0; BADARGS(1, 2, " ?type?"); @@ -2302,7 +2302,6 @@ static int tcl_getudefs STDVAR for (ul = udef; ul; ul = ul->next) if (!type || (ul->type == type)) { Tcl_AppendElement(irp, ul->name); - count++; } return TCL_OK; From 45192be32c964c8aa5561014060e6ed1e40487f7 Mon Sep 17 00:00:00 2001 From: Thomas Sader Date: Sun, 12 Feb 2023 20:21:20 +0100 Subject: [PATCH 154/201] Workaround for TCL_UTF_MAX==3 Found by: Empus Patch by: thommey Fixes: #1163 Ugly workaround that does not break current usage of emoji in the Tcl API. Our usage of the Tcl API is not correct because Eggdrop is encoding agnostic, and processes byte arrays only. Those however get passed to Tcl as strings, when they are not. The real solution is fairly complex (decode all bytes into strings with the proper encoding guess from/to the Tcl API). If users are unable to recompile Tcl with increased TCL_UTF_MAX and are stuck with 8.6 stable (8.7 is not released as stable at the time of this PR), this should be a suitable, albeit ugly and complex, workaround that keeps emoji support alive. We do not wish to break the currently working emoji usage however, which mostly works in the current state, except for a crash if passed to [string tolower/toupper/totitle], other problematic call sites aren't known. So we overwrite Tcl's string tolower/toupper/totitle with our own version that: detects utf-8 sequences that are 4 bytes converts them into utf-8 encoded surrogate pairs before Tcl's string functions are called those remain untouched by case changes in Tcl convert the surrogate pairs back in the result to the original utf-8 4-byte code sequences Side effect is that we also convert surrogate pairs if they were sent as such, which should not have a negative impact on existing scripts. Single-byte encodings being valid 4-byte emoji sequences or 6-byte surrogate pairs is hopefully highly unlikely. --- src/tcl.c | 275 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 275 insertions(+) diff --git a/src/tcl.c b/src/tcl.c index 3e6265ae2..6e02af9e2 100644 --- a/src/tcl.c +++ b/src/tcl.c @@ -96,6 +96,17 @@ int handlen = HANDLEN; extern Tcl_VarTraceProc traced_myiphostname, traced_natip, traced_remove_pass; +/* Unicode workaround for Tcl versions that only support BMP characters (3 byte utf-8) */ +#if TCL_MAJOR_VERSION == 8 && TCL_MINOR_VERSION >= 5 && TCL_MINOR_VERSION <= 6 && TCL_UTF_MAX < 4 +# define TCL_WORKAROUND_UNICODESUP 1 +struct tcl_unicodesup_info { + const char *subcmd; + Tcl_Obj *cmd; +}; +#endif + + + int expmem_tcl() { return strtot; @@ -638,6 +649,267 @@ void init_threaddata(int mainthread) increase_socks_max(); } +/* workaround for Tcl that does not support unicode outside BMP (3 byte utf-8 characters) */ +#ifdef TCL_WORKAROUND_UNICODESUP + +/* Based on https://github.com/skeeto/branchless-utf8 which is released into the public domain */ +/* 0 means not utf-8, so the length is still 1 but we can distinguish that case, + * that's why len = len + !len is used, to convert 0 to 1 and leave the rest as-is + */ +static const char utf8lengths[] = { + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 3, 3, 4, 0 +}; + +/* quick check if tricks are needed, only if 4-byte utf-8 characters are used */ +int needs_unicodesup(const char *str) +{ + while (*str) { + int len = utf8lengths[((unsigned char)str[0]) >> 3] + !utf8lengths[((unsigned char)str[0]) >> 3]; + + if (len == 4) { + return 1; + } + while (len--) { + if (*str++ == '\0') { + break; + } + } + } + return 0; +} + +/* return a new Tcl_StringObj with 4-byte utf-8 characters replaced by surrogate pairs + * - decode 4-byte utf-8 into unicode codepoint c + * - calculate high and low surrogate unicode codepoints high/low + * - encode high/low as 3-byte utf-8 strings + * the length of the result could be len/4*6 bytes long, so + * to avoid frequent reallocation/string appending, a temporary buffer is used + * for long strings (>512 characters, which does not apply to IRC lines) and assembled to a Tcl_DString + * for short strings the 512 character buffer is enough + */ +Tcl_Obj *egg_string_unicodesup_surrogate(const char *oldstr, int len) +{ + int stridx = 0, bufidx = 0; + char buf[512]; + Tcl_DString ds; + Tcl_Obj *result; + + /* chunked */ + if (len > sizeof buf) { + Tcl_DStringInit(&ds); + } + + while (stridx < len) { + int charlen = utf8lengths[((unsigned char)oldstr[stridx]) >> 3] + !utf8lengths[((unsigned char)oldstr[stridx])>> 3]; + + if (charlen == 4 && stridx + 4 <= len) { + uint32_t c; + uint16_t high, low; + + /* decode 4-byte utf-8 into unicode codepoint */ + c = (uint32_t)(oldstr[stridx++] & 0x07) << 18; + c |= (uint32_t)(oldstr[stridx++] & 0x3f) << 12; + c |= (uint32_t)(oldstr[stridx++] & 0x3f) << 6; + c |= (uint32_t)(oldstr[stridx++] & 0x3f) << 0; + + /* calculate high and low surrogate unicode codepoints */ + c -= 0x10000; + high = 0xD800 + ((c & 0xffc00) >> 10); + low = 0xDC00 + (c & 0x3ff); + + /* encode high surrogate as utf-8 */ + buf[bufidx++] = 0xe0 | ((high >> 12) & 0xf); + buf[bufidx++] = 0x80 | ((high >> 6) & 0x3f); + buf[bufidx++] = 0x80 | ((high >> 0) & 0x3f); + + /* encode low surrogate as utf-8 */ + buf[bufidx++] = 0xe0 | ((low >> 12) & 0xf); + buf[bufidx++] = 0x80 | ((low >> 6) & 0x3f); + buf[bufidx++] = 0x80 | ((low >> 0) & 0x3f); + } else { + /* copy everything else verbatim */ + while (charlen-- && stridx < len) { + buf[bufidx++] = oldstr[stridx++]; + } + } + if (len > sizeof buf && bufidx > sizeof buf - 6) { + Tcl_DStringAppend(&ds, buf, bufidx); + bufidx = 0; + } + } + if (len > sizeof buf && bufidx) { + Tcl_DStringAppend(&ds, buf, bufidx); + result = Tcl_NewStringObj(Tcl_DStringValue(&ds), Tcl_DStringLength(&ds)); + Tcl_DStringFree(&ds); + } else { + result = Tcl_NewStringObj(buf, bufidx); + } + return result; +} + +/* decode 2 utf-8 sequences that are 3 bytes long and check if they are surrogate pairs */ +int decode_surrogates(const char *str, uint32_t *high, uint32_t *low) +{ + *high = (*str++ & 0xf) << 12; + *high |= (*str++ & 0x3f) << 6; + *high |= (*str++ & 0x3f) << 0; + if (*high < 0xD800 || *high > 0xDBFF) { + return 0; + } + *low = (*str++ & 0xf) << 12; + *low |= (*str++ & 0x3f) << 6; + *low |= (*str++ & 0x3f) << 0; + if (*low < 0xDC00 || *low > 0xDFFF) { + return 0; + } + return 1; +} + +/* returns a new Tcl_StringObj by replacing surrogate pairs back into 4-byte utf-8 sequences + * - for every 3-byte utf-8 sequence, check if it's a surrogate pair + * - decode into high/low codepoints + * - calculate original codepoint and write back a 4-byte utf-8 sequence instead of 3-byte surrogate pairs + * the length of the result is guaranteed to be equal or shorter than the original, so malloc(len) is sufficient space + */ +Tcl_Obj *egg_string_unicodesup_desurrogate(const char *oldstr, int len) +{ + int stridx = 0, bufidx = 0; + char *buf = nmalloc(len); + + while (stridx < len) { + uint32_t low, high; + int charlen = utf8lengths[((unsigned char)oldstr[stridx]) >> 3] + !utf8lengths[((unsigned char)oldstr[stridx]) >> 3]; + + if (charlen == 3 && stridx + 6 <= len && utf8lengths[((unsigned char)oldstr[stridx + 3]) >> 3] == 3 && decode_surrogates(oldstr + stridx, &high, &low)) { + uint32_t c = 0x10000 + (high - 0xD800) * 0x400 + (low - 0xDC00); + + buf[bufidx++] = 0xF0 | ((c >> 18) & 0x07); + buf[bufidx++] = 0x80 | ((c >> 12) & 0x3f); + buf[bufidx++] = 0x80 | ((c >> 6) & 0x3f); + buf[bufidx++] = 0x80 | ((c >> 0) & 0x3f); + + stridx += 6; + } else { + while (charlen-- && stridx < len) { + buf[bufidx++] = oldstr[stridx++]; + } + } + } + return Tcl_NewStringObj(buf, bufidx); +} + +/* C function called for ::egg_tcl_tolower/toupper/totitle + * context (original Tcl function and which conversion to do) is in cd + */ +int egg_string_unicodesup(void *cd, Tcl_Interp *interp, int objc, Tcl_Obj *const orig_objv[]) +{ + struct tcl_unicodesup_info *info = cd; + Tcl_Obj **new_objv; + int i; + int ret; + + /* impossible? */ + if (objc == 0) { + return Tcl_EvalObjv(interp, objc, orig_objv, 0); + } + /* new arguments to original Tcl string tolower/toupper/totitle */ + new_objv = nmalloc(objc * sizeof *new_objv); + + for (i = 0; i < objc; i++) { + if (i == 0) { + /* overwrite command objv[0] with original Tcl command instead of this function */ + new_objv[i] = info->cmd; + } else if (i == 1 && needs_unicodesup(Tcl_GetString(orig_objv[1]))) { + int len; + const char *oldstr = Tcl_GetStringFromObj(orig_objv[1], &len); + + /* overwrite string argument by replacing 4-byet utf-8 sequences with surrogate pairs */ + new_objv[1] = egg_string_unicodesup_surrogate(oldstr, len); + } else { + /* copy other arguments, e.g. string tolower test 1 2 */ + new_objv[i] = orig_objv[i]; + } + /* ref count of new objects must be increased before eval and decreased after, orig_objv is read-only */ + Tcl_IncrRefCount(new_objv[i]); + } + + /* call original Tcl function */ + ret = Tcl_EvalObjv(interp, objc, new_objv, 0); + + /* decrease ref count of new arguments */ + for (i = 0; i < objc; i++) { + Tcl_DecrRefCount(new_objv[i]); + } + nfree(new_objv); + /* overwrite Tcl's result by replacing surrogates back to 4-byte utf-8 sequences*/ + if (ret == TCL_OK) { + int len; + Tcl_Obj *resultobj = Tcl_GetObjResult(interp); + const char *str = Tcl_GetStringFromObj(resultobj, &len); + + Tcl_SetObjResult(interp, egg_string_unicodesup_desurrogate(str, len)); + } + return ret; +} + +/* register a single workaround command, making the namespace ensemble string call ::egg_string_ instead + * original command names are ::tcl::string:: + */ +void init_unicodesup_cmd(Tcl_Obj *ensdict, const char *subcmd, int index) +{ + Tcl_Obj *orig_cmd; + static struct tcl_unicodesup_info info[3]; + char buf[64]; + + if (Tcl_DictObjGet(interp, ensdict, Tcl_NewStringObj(subcmd, -1), &orig_cmd) != TCL_OK || !orig_cmd) { + putlog(LOG_MISC, "*", "ERROR: Tcl non-BMP unicodesup could not find string %s subcommand", subcmd); + return; + } + + info[index].subcmd = subcmd; + info[index].cmd = orig_cmd; + Tcl_IncrRefCount(orig_cmd); + + snprintf(buf, sizeof buf, "::egg_string_%s", subcmd); + Tcl_CreateObjCommand(interp, buf, egg_string_unicodesup, &info[index], NULL); + + if (Tcl_DictObjPut(interp, ensdict, Tcl_NewStringObj(subcmd, -1), Tcl_NewStringObj(buf, -1)) != TCL_OK) { + putlog(LOG_MISC, "*", "ERROR: Tcl non-BMP unicodesup could not set dictionary redirect"); + return; + } +} + +/* register all workaround functions */ +void init_unicodesup(void) +{ + Tcl_Obj *ensdict; + Tcl_Command enscmd = Tcl_FindEnsemble(interp, Tcl_NewStringObj("string", -1), 0); + + if (!enscmd) { + putlog(LOG_MISC, "*", "ERROR: Tcl non-BMP unicodesup could not find string command"); + return; + } + if (!Tcl_IsEnsemble(enscmd)) { + putlog(LOG_MISC, "*", "ERROR: Tcl non-BMP unicodesup is not a namespace ensemble"); + return; + } + if (Tcl_GetEnsembleMappingDict(interp, enscmd, &ensdict) != TCL_OK || !ensdict) { + putlog(LOG_MISC, "*", "ERROR: Tcl non-BMP unicodesup could not get namespace ensemble dictionary"); + return; + } + + init_unicodesup_cmd(ensdict, "tolower", 0); + init_unicodesup_cmd(ensdict, "toupper", 1); + init_unicodesup_cmd(ensdict, "totitle", 2); + + if (Tcl_SetEnsembleMappingDict(interp, enscmd, ensdict) != TCL_OK) { + putlog(LOG_MISC, "*", "ERROR: Tcl non-BMP unicodesup could not set namespace ensemble dictionary"); + return; + } +} +#endif /* TCL_WORKAROUND_UNICODESUP */ + /* Not going through Tcl's crazy main() system (what on earth was he * smoking?!) so we gotta initialize the Tcl interpreter */ @@ -768,6 +1040,9 @@ void init_tcl(int argc, char **argv) } Tcl_PkgProvide(interp, "eggdrop", pver); +#ifdef TCL_WORKAROUND_UNICODESUP + init_unicodesup(); +#endif /* Initialize binds and traces */ init_bind(); init_traces(); From aefed9945d8cb4d3fbad3884ee9807fec00bd4b1 Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sun, 12 Feb 2023 21:26:51 +0000 Subject: [PATCH 155/201] Add ssl header version to .status Found by: wheel Patch by: michaelortmann Fixes: #1322 --- src/chanprog.c | 12 ++++++------ src/lang.h | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/chanprog.c b/src/chanprog.c index f5c5f6644..f20b6981e 100644 --- a/src/chanprog.c +++ b/src/chanprog.c @@ -336,22 +336,22 @@ void tell_verbose_status(int idx) dprintf(idx, "%s %s (%s %s)\n", MISC_TCLVERSION, ((interp) && (Tcl_Eval(interp, "info patchlevel") == TCL_OK)) ? tcl_resultstring() : (Tcl_Eval(interp, "info tclversion") == TCL_OK) ? - tcl_resultstring() : "*unknown*", MISC_TCLHVERSION, TCL_PATCH_LEVEL); + tcl_resultstring() : "*unknown*", MISC_HEADERVERSION, TCL_PATCH_LEVEL); if (tcl_threaded()) dprintf(idx, "Tcl is threaded.\n"); #ifdef TLS dprintf(idx, "TLS support is enabled.\n" #if defined HAVE_EVP_PKEY_GET1_EC_KEY && defined HAVE_OPENSSL_MD5 - "TLS library: %s\n", + "TLS library: %s (%s " OPENSSL_VERSION_TEXT ")\n", #elif !defined HAVE_EVP_PKEY_GET1_EC_KEY && defined HAVE_OPENSSL_MD5 - "TLS library: %s\n (no elliptic curve support)\n", + "TLS library: %s (%s " OPENSSL_VERSION_TEXT ")\n (no elliptic curve support)\n", #elif defined HAVE_EVP_PKEY_GET1_EC_KEY && !defined HAVE_OPENSSL_MD5 - "TLS library: %s\n (no MD5 support)\n", + "TLS library: %s (%s " OPENSSL_VERSION_TEXT ")\n (no MD5 support)\n", #elif !defined HAVE_EVP_PKEY_GET1_EC_KEY && !defined HAVE_OPENSSL_MD5 - "TLS library: %s\n (no elliptic curve or MD5 support)\n", + "TLS library: %s (%s " OPENSSL_VERSION_TEXT ")\n (no elliptic curve or MD5 support)\n", #endif - SSLeay_version(SSLEAY_VERSION)); + SSLeay_version(SSLEAY_VERSION), MISC_HEADERVERSION); #else dprintf(idx, "TLS support is not available.\n"); #endif diff --git a/src/lang.h b/src/lang.h index 8ce117c6f..8f9e391ca 100644 --- a/src/lang.h +++ b/src/lang.h @@ -122,7 +122,7 @@ #define MISC_JUPED get_language(0x542) #define MISC_NOFREESOCK get_language(0x543) #define MISC_TCLVERSION get_language(0x544) -#define MISC_TCLHVERSION get_language(0x545) +#define MISC_HEADERVERSION get_language(0x545) /* IRC */ #define IRC_BANNED get_language(0x600) From 7e8080e752b9d9c4a945aa1e758a5ac42fefd86c Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Sun, 12 Feb 2023 21:30:55 +0000 Subject: [PATCH 156/201] strftime doc update Patch by: michaelortmann --- doc/sphinx_source/install/install.rst | 2 +- doc/sphinx_source/modules/mod/server.rst | 4 ++-- doc/sphinx_source/using/core.rst | 5 ++--- doc/sphinx_source/using/tcl-commands.rst | 4 ++-- eggdrop.conf | 8 +++----- help/set/cmds1.help | 5 ++--- scripts/help/msg/userinfo.help | 16 ++++++++-------- src/mod/seen.mod/seen.c | 4 ++-- 8 files changed, 22 insertions(+), 26 deletions(-) diff --git a/doc/sphinx_source/install/install.rst b/doc/sphinx_source/install/install.rst index 2a1679844..c1af33284 100644 --- a/doc/sphinx_source/install/install.rst +++ b/doc/sphinx_source/install/install.rst @@ -37,7 +37,7 @@ Eggdrop uses the GNU autoconfigure scripts to make things easier. and will enlarge the binary a bit, but it's worth it if you want to support Eggdrop development. -4. Eggdrop must be installed in a directory somewhere. This is +4. Eggdrop must be installed in a directory somewhere. This is accomplished by entering the UNIX command:: make install diff --git a/doc/sphinx_source/modules/mod/server.rst b/doc/sphinx_source/modules/mod/server.rst index 6cdd4a968..bb7f55c60 100644 --- a/doc/sphinx_source/modules/mod/server.rst +++ b/doc/sphinx_source/modules/mod/server.rst @@ -103,8 +103,8 @@ There are also some variables you can set in your config file: set msg-rate 2 Number of seconds to wait between transmitting queued lines to the - server. Lower this value at your own risk. ircd is known to start - flood control at 512 bytes/2 seconds. + server. Lower this value at your own risk. ircd is known to start flood + control at 512 bytes/2 seconds. set ssl-verify-servers 0 Control certificate verification for servers. You can set this by adding diff --git a/doc/sphinx_source/using/core.rst b/doc/sphinx_source/using/core.rst index 8da7b993d..802b0c696 100644 --- a/doc/sphinx_source/using/core.rst +++ b/doc/sphinx_source/using/core.rst @@ -193,7 +193,7 @@ logfile "logs/logfile" set timestamp-format "[%H:%M:%S]" Set the following to the timestamp for the logfile entries. Popular times might be "[%H:%M]" (hour, min), or "[%H:%M:%S]" (hour, min, sec). - Read 'man strftime' for more formatting options. Keep it below 32 chars. + Read 'man strftime' for more formatting options. Keep it below 32 chars. set keep-all-logs 0 If you want to keep your logfiles forever, turn this setting on. All @@ -218,8 +218,7 @@ logfile "logs/logfile" If keep-all-logs is 1, this setting will define the suffix of the logfiles. The default will result in a suffix like "04May2000". "%Y%m%d" will produce the often used yyyymmdd format. Read the strftime manpages - for more options. NOTE: On systems which don't support strftime, the - default format will always be used. + for more options. Console Settings ---------------- diff --git a/doc/sphinx_source/using/tcl-commands.rst b/doc/sphinx_source/using/tcl-commands.rst index 904867221..888683d68 100644 --- a/doc/sphinx_source/using/tcl-commands.rst +++ b/doc/sphinx_source/using/tcl-commands.rst @@ -1079,7 +1079,7 @@ isidentified [channel] isaway [channel] ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - Description: determine if a user is marked as 'away' on a server. IMPORTANT: this command is only "mostly" reliable on its own when the IRCv3 away-notify capability is available and negotiated with the IRC server (if you didn't add this to your config file, it likely isn't enabled- you can confirm using the ``cap`` Tcl command). Additionally, there is no way for Eggdrop (or any client) to capture a user's away status when the user first joins a channel (they are assumed present by Eggdrop on join). To use this command without the away-notify capability negotiated, or to get a user's away status on join (via a JOIN bind), use ``refreshchan w`` on a channel the user is on, which will refresh the current away status stored by Eggdrop for all users on the channel. + Description: determine if a user is marked as 'away' on a server. IMPORTANT: this command is only "mostly" reliable on its own when the IRCv3 away-notify capability is available and negotiated with the IRC server (if you didn't add this to your config file, it likely isn't enabled- you can confirm using the ``cap`` Tcl command). Additionally, there is no way for Eggdrop (or any client) to capture a user's away status when the user first joins a channel (they are assumed present by Eggdrop on join). To use this command without the away-notify capability negotiated, or to get a user's away status on join (via a JOIN bind), use ``refreshchan w`` on a channel the user is on, which will refresh the current away status stored by Eggdrop for all users on the channel. Returns: 1 if Eggdrop is currently tracking someone by that nickname marked as 'away' (again, see disclaimer above) by an IRC server; 0 otherwise. @@ -2688,7 +2688,7 @@ matchcidr
      matchstr ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - Description: checks if pattern matches string. Only two wildcards are supported: '*' and '?'. Matching is case-insensitive. This command is intended as a simplified alternative to Tcl's string match. + Description: checks if pattern matches string. Only two wildcards are supported: '*' and '?'. Matching is case-insensitive. This command is intended as a simplified alternative to Tcl's string match. Returns: 1 if the pattern matches the string, 0 if it doesn't. diff --git a/eggdrop.conf b/eggdrop.conf index 81e35bfe9..ac0b8c297 100755 --- a/eggdrop.conf +++ b/eggdrop.conf @@ -188,7 +188,7 @@ set log-time 1 # Set the following to the timestamp for the logfile entries. Popular times # might be "[%H:%M]" (hour, min), or "[%H:%M:%S]" (hour, min, sec). -# Read `man strftime' for more formatting options. Keep it below 32 chars. +# Read `man strftime' for more formatting options. Keep it below 32 chars. set timestamp-format {[%H:%M:%S]} # If you want to keep your logfiles forever, turn this setting on. All @@ -200,8 +200,6 @@ set keep-all-logs 0 # If keep-all-logs is 1, this setting will define the suffix of the logfiles. # The default will result in a suffix like "04May2000". "%Y%m%d" will produce # the often used yyyymmdd format. Read the strftime manpages for more options. -# NOTE: On systems which don't support strftime, the default format will -# be used _always_. set logfile-suffix ".%d%b%Y" # You can specify when Eggdrop should switch logfiles and start fresh. You @@ -1184,8 +1182,8 @@ set extended-join 1 #### End of CAP features #### # Number of seconds to wait between transmitting queued lines to the server. -# Lower this value at your own risk. ircd is known to start flood control -# at 512 bytes/2 seconds. +# Lower this value at your own risk. ircd is known to start flood control at +# 512 bytes/2 seconds. set msg-rate 2 # This setting makes the bot try to get his original nickname back if its diff --git a/help/set/cmds1.help b/help/set/cmds1.help index 6f3a9addc..f6fead459 100644 --- a/help/set/cmds1.help +++ b/help/set/cmds1.help @@ -191,7 +191,7 @@ ### %bset timestamp-format%b Set the following to the timestamp for the logfile entries. Popular times might be "[%H:%M]" (hour,min), or "[%H:%M:%S]" (hour, min, sec). - Read `man strftime' for more formatting options. Keep it below 32 + Read `man strftime' for more formatting options. Keep it below 32 chars. %{help=set max-logsize}%{+n} ### %bset max-logsize%b @@ -211,8 +211,7 @@ If keep-all-logs is 1, this setting will define the suffix of the logfiles. The default will result in a suffix like "04May2000". "%Y%m%d" will produce the often used yyyymmdd format. Read the - strftime manpages for more options. NOTE: On systems which don't - support strftime, the default format will be used _always_. + strftime manpages for more options. %{help=set quiet-save}%{+n} ### %bset quiet-save%b <0/1/2/3> "Writing user file..." and "Writing channel file..." messages won't diff --git a/scripts/help/msg/userinfo.help b/scripts/help/msg/userinfo.help index ef1544314..51a0c4615 100644 --- a/scripts/help/msg/userinfo.help +++ b/scripts/help/msg/userinfo.help @@ -1,9 +1,9 @@ %{help=email} %b/MSG%b %B %bEMAIL%b - This will set your email address. It's shown when - someone does a WHOIS on you (see HELP WHOIS). If - you don't specify a email address, the bot will show - you the email address it currently has set for you (if any). + This will set your email address. It's shown when someone + does a WHOIS on you (see HELP WHOIS). If you don't specify a + email address, the bot will show you the email address it + currently has set for you (if any). %b/MSG%b %B %bEMAIL%b none This clears your email address. %{help=url} @@ -15,7 +15,7 @@ This clears your url address. %{help=bf} %b/MSG%b %B %bBF%b - This will set your boyfriend. some scripts (such as seen) + This will set your boyfriend. Some scripts (such as seen) use this information. If you don't specify a boyfriend, the bot will show you the boyfriend it currently has set for you (if any). @@ -23,7 +23,7 @@ This clears your boyfriend. %{help=gf} %b/MSG%b %B %bGF%b - This will set your girlfriend. some scripts (such as seen) + This will set your girlfriend. Some scripts (such as seen) use this information. If you don't specify a girlfriend, the bot will show you the girlfriend it currently has set for you (if any). @@ -31,14 +31,14 @@ This clears your girlfriend. %{help=irl} %b/MSG%b %B %bIRL%b - This will set your real name. just for the information + This will set your real name. Just for the information of others :). If you don't specify a real name, the bot will show you the real name it currently has set for you (if any). %b/MSG%b %B %bIRL%b none This clears your real name. %{help=dob} %b/MSG%b %B %bDOB%b - This will set your date of birth. now now, be honest :) + This will set your date of birth. Now, be honest :) If you don't specify a date of birth, the bot will show you the date of birth it currently has set for you (if any). %b/MSG%b %B %bDOB%b none diff --git a/src/mod/seen.mod/seen.c b/src/mod/seen.mod/seen.c index 66c834f8a..4e2182152 100644 --- a/src/mod/seen.mod/seen.c +++ b/src/mod/seen.mod/seen.c @@ -395,7 +395,7 @@ static void do_seen(int idx, char *prefix, char *nick, char *hand, prefix, whoredirect, whotarget); return; } - /* Target not on this channel. Check other channels */ + /* Target not on this channel. Check other channels */ chan = chanset; while (chan) { m = ismember(chan, whotarget); @@ -442,7 +442,7 @@ static void do_seen(int idx, char *prefix, char *nick, char *hand, } } } - /* Target known, but nowhere to be seen. Give last IRC and botnet time */ + /* Target known, but nowhere to be seen. Give last IRC and botnet time */ wordshift(word1, text); if (!strcasecmp(word1, "anywhere")) cr = NULL; From ac2c81a0222edb11c529b2165bbf1068a28e4bfc Mon Sep 17 00:00:00 2001 From: Geo Date: Sun, 12 Feb 2023 16:58:45 -0500 Subject: [PATCH 157/201] Revert bind char change ... but keep DCC output of * --- src/flags.c | 2 +- src/tclhash.c | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/flags.c b/src/flags.c index 26285fdbd..ce60b2e3d 100644 --- a/src/flags.c +++ b/src/flags.c @@ -1133,7 +1133,7 @@ static int flag2str(char *string, int bot, int udef) x++; } if (string == old) - *string++ = '*'; + *string++ = '-'; return string - old; } diff --git a/src/tclhash.c b/src/tclhash.c index 71d35f6c2..cb54cecdc 100644 --- a/src/tclhash.c +++ b/src/tclhash.c @@ -1316,6 +1316,10 @@ void tell_binds(int idx, char *par) continue; proc = tc->func_name; build_flags(flg, &(tc->flags), NULL); + if (!strcmp(flg, "-|-")) { + flg[0] = '*'; + flg[1] = '\0'; + } if (showall || proc[0] != '*') { int ok = 0; From a602590e54a30dca0982c43411d1abefeb606a4b Mon Sep 17 00:00:00 2001 From: Geo Date: Sun, 12 Feb 2023 19:47:13 -0500 Subject: [PATCH 158/201] Update woobie mod docs --- doc/html/index.html | 24 +- doc/html/modules/internals.html | 396 ++++++++++++++++++++++++ doc/html/tutorials/module.html | 373 ++++++++++++++++++++++ doc/sphinx_source/index.rst | 2 + doc/sphinx_source/modules/internals.rst | 264 ++++++++++++++++ doc/sphinx_source/modules/writing.rst | 6 +- doc/sphinx_source/tutorials/module.rst | 235 ++++++++++++++ 7 files changed, 1297 insertions(+), 3 deletions(-) create mode 100644 doc/html/modules/internals.html create mode 100644 doc/html/tutorials/module.html create mode 100644 doc/sphinx_source/modules/internals.rst create mode 100644 doc/sphinx_source/tutorials/module.rst diff --git a/doc/html/index.html b/doc/html/index.html index 412af9939..31d1e7456 100644 --- a/doc/html/index.html +++ b/doc/html/index.html @@ -68,12 +68,14 @@

      Table of Contents

    3. Common First Steps
    4. Enabling TLS Security on Eggdrop
    5. Writing an Eggdrop Script
    6. +
    7. Writing an Eggdrop Module
    8. Eggdrop Modules

      About Eggdrop

      diff --git a/doc/html/modules/internals.html b/doc/html/modules/internals.html new file mode 100644 index 000000000..9faf08e66 --- /dev/null +++ b/doc/html/modules/internals.html @@ -0,0 +1,396 @@ + + + + + + + + Eggdrop Bind Internals — Eggdrop 1.9.4 documentation + + + + + + + + + + + + + +
      +
      + +
      + +
      +
      +
      + +
      +

      Eggdrop Bind Internals

      +

      This document is intended for C developers who want to understand how Eggdrop’s Tcl binds or C binds work.

      +

      For documentation purposes the “dcc” bind type is used as an example.

      +

      It already exists and is suitable to illustrate the details of bind handling in Eggdrop.

      +

      Note: All code snippets are altered for brevity and simplicity, see original source code for the full and current versions.

      +
      +

      Bind Table Creation

      +

      The bind table is added by calling, either at module initialization or startup:

      +
      /* Global symbol, available to other C files with
      + * extern p_tcl_bind_list H_dcc;
      + */
      +p_tcl_bind_list H_dcc;
      +
      +/* Creating the bind table:
      + * @param[in] const char *name Limited in length, see tclhash.h
      + * @param[in] int flags        HT_STACKABLE or 0
      + * @param[in] IntFunc          Function pointer to C handler
      + * @return    p_tcl_bind_list  aka (tcl_bind_list_t *)
      + */
      +H_dcc = add_bind_table("dcc", 0, builtin_dcc);
      +
      +
      +

      What the C handler does is explained later, because a lot happens before it is actually called. IntFunc is a generic function pointer that returns an int with arbitrary arguments.

      +

      H_dcc can be exported from core and imported into modules as any other variable or function. That should be explained in a separate document.

      +
      +
      +

      Stackable Binds: HT_STACKABLE

      +

      HT_STACKABLE means that multiple binds can exist for the same mask.

      +
      bind dcc - test proc1; # not stackable
      +bind dcc - test proc2; # overwrites the first one, only proc2 will be called
      +
      +
      +

      It does not automatically call multiple binds that match, see later in the Triggering any Bind section for details.

      +
      +
      +

      Tcl Binding

      +

      After the bind table is created with add_bind_table, Tcl procs can already be registered to this bind by calling:

      +
      bind dcc -|- test myproc
      +proc myproc {args} {
      +  putlog "myproc was called, argument list: '[join $args ',']'"
      +  return 0
      +}
      +
      +
      +

      Of course it is not clear so far:

      +
        +
      • If flags -|- matter for this bind at all and what they are checked against
      • +
      • If channel flags have a meaning or global/bot only
      • +
      • What test is matched against to see if the bind should trigger
      • +
      • Which arguments myproc receives, the example just accepts all arguments
      • +
      +
      +
      +

      Triggering the Bind

      +

      To trigger the bind and call it with the desired arguments, a function is created.

      +
      int check_tcl_dcc(const char *cmd, int idx, const char *args) {
      +  struct flag_record fr = { FR_GLOBAL | FR_CHAN, 0, 0, 0, 0, 0 };
      +  int x;
      +  char s[11];
      +
      +  get_user_flagrec(dcc[idx].user, &fr, dcc[idx].u.chat->con_chan);
      +  egg_snprintf(s, sizeof s, "%ld", dcc[idx].sock);
      +  Tcl_SetVar(interp, "_dcc1", (char *) dcc[idx].nick, 0);
      +  Tcl_SetVar(interp, "_dcc2", (char *) s, 0);
      +  Tcl_SetVar(interp, "_dcc3", (char *) args, 0);
      +  x = check_tcl_bind(H_dcc, cmd, &fr, " $_dcc1 $_dcc2 $_dcc3",
      +                  MATCH_PARTIAL | BIND_USE_ATTR | BIND_HAS_BUILTINS);
      +  /* snip ..., return code handling */
      +  return 0;
      +}
      +
      +
      +

      The global Tcl variables $_dcc1 $_dcc2 $_dcc3 are used as temporary string variables and passed as arguments to the registered Tcl proc.

      +

      This shows which arguments the callbacks in Tcl get:

      +
        +
      • the nickname of the DCC chat user (handle of the user)
      • +
      • the IDX (socket id) of the partyline so [putdcc] can respond back
      • +
      • another string argument that depends on the caller
      • +
      +

      The call to check_tcl_dcc can be found in the DCC parsing in src/dcc.c.

      +
      +
      +

      Triggering any Bind

      +

      check_tcl_bind is used by all binds and does the following:

      +
      /* Generic function to call one/all matching binds
      + * @param[in] tcl_bind_list_t *tl      Bind table (e.g. H_dcc)
      + * @param[in] const char *match        String to match the bind-masks against
      + * @param[in] struct flag_record *atr  Flags of the user calling the bind
      + * @param[in] const char *param        Arguments to add to the bind callback proc (e.g. " $_dcc1 $_dcc2 $_dcc3")
      + * @param[in] int match_type           Matchtype and various flags
      + * @returns   int                      Match result code
      + */
      +
      +/* Source code changed, only illustrative */
      +int check_tcl_bind(tcl_bind_list_t *tl, const char *match, struct flag_record *atr, const char *param, int match_type) {
      +  int x = BIND_NOMATCH;
      +  for (tm = tl->first; tm && !finish; tm_last = tm, tm = tm->next) {
      +    /* Check if bind mask matches */
      +    if (!check_bind_match(match, tm->mask, match_type))
      +      continue;
      +    for (tc = tm->first; tc; tc = tc->next) {
      +      /* Check if the provided flags suffice for this command. */
      +      if (check_bind_flags(&tc->flags, atr, match_type)) {
      +        tc->hits++;
      +        /* not much more than Tcl_Eval(interp, "<procname> <arguments>"); and grab the result */
      +        x = trigger_bind(tc->func_name, param, tm->mask);
      +      }
      +    }
      +  }
      +  return x;
      +}
      +
      +
      +

      The supplied flags to check_tcl_bind in check_tcl_dcc are what defines how matching is performed.

      +

      In the case of a DCC bind we had:

      +
        +
      • Matchtype MATCH_PARTIAL: Prefix-Matching if the command can be uniquely identified (e.g. dcc .help calls .help)
      • +
      • Additional flag BIND_USE_ATTR: Flags are checked
      • +
      • Additional flag BIND_HAS_BUILTINS: Something with flag matching, unsure
      • +
      +

      For details on the available match types (wildcard matching, exact matching, etc.) see src/tclegg.h. Additional flags are also described there as well as the return codes of check_tcl_bind (e.g. BIND_NOMATCH).

      +

      Note: For a bind type to be stackable it needs to be registered with HT_STACKABLE AND check_tcl_bind must be called with BIND_STACKABLE.

      +
      +
      +

      C Binding

      +

      To create a C function that is called by the bind, Eggdrop provides the add_builtins function.

      +
      /* Add a list of C function callbacks to a bind
      + * @param[in] tcl_bind_list_t *  the bind type (e.g. H_dcc)
      + * @param[in] cmd_t *            a NULL-terminated table of binds:
      + * cmd_t *mycmds = {
      + *   {char *name, char *flags, IntFunc function, char *tcl_name},
      + *   ...,
      + *   {NULL, NULL, NULL, NULL}
      + * };
      + */
      +void add_builtins(tcl_bind_list_t *tl, cmd_t *cc) {
      +  char p[1024];
      +  cd_tcl_cmd tclcmd;
      +
      +  tclcmd.name = p;
      +  tclcmd.callback = tl->func;
      +  for (i = 0; cc[i].name; i++) {
      +    /* Create Tcl command with automatic or given names *<bindtype>:<funcname>, e.g.
      +     * - H_raw {"324", "", got324, "irc:324"} => *raw:irc:324
      +     * - H_dcc {"boot", "t", cmd_boot, NULL} => *dcc:boot
      +     */
      +    egg_snprintf(p, sizeof p, "*%s:%s", tl->name, cc[i].funcname ? cc[i].funcname : cc[i].name);
      +    /* arbitrary void * can be included, we include C function pointer */
      +    tclcmd.cdata = (void *) cc[i].func;
      +    add_cd_tcl_cmd(tclcmd);
      +    bind_bind_entry(tl, cc[i].flags, cc[i].name, p);
      +  }
      +}
      +
      +
      +

      It automatically creates Tcl commands (e.g. *dcc:cmd_boot) that will call the C handler from add_bind_table in the first section Bind Table Creation and it gets a context (void *) argument with the C function it is supposed to call (e.g. cmd_boot()).

      +

      Now we can actually look at the C function handler for dcc as an example and what it has to implement.

      +
      +
      +

      C Handler

      +

      The example handler for DCC looks as follows:

      +
      /* Typical Tcl_Command arguments, just like e.g. tcl_putdcc is a Tcl/C command for [putdcc] */
      +static int builtin_dcc (ClientData cd, Tcl_Interp *irp, int argc, char *argv[]) {
      +  int idx;
      +  /* F: The C function we want to call, if the bind is okay, e.g. cmd_boot() */
      +  Function F = (Function) cd;
      +
      +  /* Task of C function: verify argument count and syntax as any Tcl command */
      +  BADARGS(4, 4, " hand idx param");
      +
      +  /* C Macro only used in C handlers for bind types, sanity checks the Tcl proc name
      +   * for *<bindtype>:<name> and that we are in the right C handler
      +   */
      +  CHECKVALIDITY(builtin_dcc);
      +
      +  idx = findidx(atoi(argv[2]));
      +  if (idx < 0) {
      +      Tcl_AppendResult(irp, "invalid idx", NULL);
      +      return TCL_ERROR;
      +  }
      +
      +  /* Call the desired C function, e.g. cmd_boot() with their arguments */
      +  F(dcc[idx].user, idx, argv[3]);
      +  Tcl_ResetResult(irp);
      +  Tcl_AppendResult(irp, "0", NULL);
      +  return TCL_OK;
      +}
      +
      +
      +

      This is finally the part where we see the arguments a C function gets for a DCC bind as opposed to a Tcl proc.

      +

      F(dcc[idx].user, idx, argv[3]):

      +
        +
      • User information as struct userrec *
      • +
      • IDX as int
      • +
      • The 3rd string argument from the Tcl call to *dcc:cmd_boot, which was $_dcc3 which was args to check_tcl_dcc which was everything after the dcc command
      • +
      +

      So this is how we register C callbacks for binds with the correct arguments:

      +
      /* We know the return value is ignored because the return value of F
      + * in builtin_dcc is ignored, so it can be void, but for other binds
      + * it could be something else and used in the C handler for the bind.
      + */
      +void cmd_boot(struct userrec *u, int idx, char *par) { /* snip */ }
      +
      +cmd_t *mycmds = {
      +  {"boot", "t", (IntFunc) cmd_boot, NULL /* automatic name: *dcc:boot */},
      +  {NULL, NULL, NULL, NULL}
      +};
      +add_builtins(H_dcc, mycmds);
      +
      +
      +
      +
      +

      Summary

      +

      In summary, this is how the dcc bind is called:

      +
        +
      • check_tcl_dcc() creates Tcl variables $_dcc1 $_dcc2 $_dcc3 and lets check_tcl_bind call the binds
      • +
      • Tcl binds are done at this point
      • +
      • C binds mean the Tcl command associated with the bind is *dcc:boot which calls builtin_dcc which gets cmd_boot as ClientData cd argument
      • +
      • buildin_dcc performs some sanity checking to avoid crashes and then calls cmd_boot() aka F() with the arguments it wants C callbacks to have
      • +
      +

      Example edited and annotated gdb backtrace in cmd_boot after doing .boot test on the partyline as user thommey with typical owner flags.

      +
      #0  cmd_boot (u=0x55e8bd8a49b0, idx=4, par=0x55e8be6a0010 "test") at cmds.c:614
      +    *u = {next = 0x55e8bd8aec90, handle = "thommey", flags = 8977024, flags_udef = 0, chanrec = 0x55e8bd8aeae0, entries = 0x55e8bd8a4a10}
      +#1  builtin_dcc (cd=0x55e8bbf002d0 <cmd_boot>, irp=0x55e8bd59b1c0, argc=4, argv=0x55e8bd7e3e00) at tclhash.c:678
      +    idx = 4
      +    argv = {0x55e8be642fa0 "*dcc:boot", 0x55e8be9f6bd0 "thommey", 0x55e8be7d9020 "4", 0x55e8be6a0010 "test", 0x0}
      +    F = 0x55e8bbf002d0 <cmd_boot>
      +#5  Tcl_Eval (interp=0x55e8bd59b1c0, script = "*dcc:boot $_dcc1 $_dcc2 $_dcc3") from /usr/lib/x86_64-linux-gnu/libtcl8.6.so
      +    Tcl: return $_dcc1 = "thommey"
      +    Tcl: return $_dcc2 = "4"
      +    Tcl: return $_dcc3 = "test"
      +    Tcl: return $lastbind = "boot" (set automatically by trigger_bind)
      +#8  trigger_bind (proc=proc@entry=0x55e8bd5efda0 "*dcc:boot", param=param@entry=0x55e8bbf4112b " $_dcc1 $_dcc2 $_dcc3", mask=mask@entry=0x55e8bd5efd40 "boot") at tclhash.c:742
      +#9  check_tcl_bind (tl=0x55e8bd5eecb0 <H_dcc>, match=match@entry=0x7ffcf3f9dac1 "boot", atr=atr@entry=0x7ffcf3f9d100, param=param@entry=0x55e8bbf4112b " $_dcc1 $_dcc2 $_dcc3", match_type=match_type@entry=80) at tclhash.c:942
      +    proc = 0x55e8bd5efda0 "*dcc:boot"
      +    mask = 0x55e8bd5efd40 "boot"
      +    brkt = 0x7ffcf3f9dac6 "test"
      +#10 check_tcl_dcc (cmd=cmd@entry=0x7ffcf3f9dac1 "boot", idx=idx@entry=4, args=0x7ffcf3f9dac6 "test") at tclhash.c:974
      +    fr = {match = 5, global = 8977024, udef_global = 0, bot = 0, chan = 0, udef_chan = 0}
      +#11 dcc_chat (idx=idx@entry=4, buf=<optimized out>, i=<optimized out>) at dcc.c:1068
      +    v = 0x7ffcf3f9dac1 "boot"
      +
      +
      +
      +
      + + +
      +
      +
      +
      +
      +
      +
      + + + + + \ No newline at end of file diff --git a/doc/html/tutorials/module.html b/doc/html/tutorials/module.html new file mode 100644 index 000000000..b750801ea --- /dev/null +++ b/doc/html/tutorials/module.html @@ -0,0 +1,373 @@ + + + + + + + + Writing an Eggdrop Module — Eggdrop 1.9.4 documentation + + + + + + + + + + + + + +
      +
      + +
      + +
      +
      +
      + +
      +

      Writing an Eggdrop Module

      +

      An Eggdrop module is a piece of C code that can be loaded (or unloaded) onto the core Eggdrop code. A module differs from a Tcl script in that modules must be compiled and then loaded, whereas scripts can be edited and loaded directly. Importantly, a module can be written to create new Eggdrop-specific Tcl commands and binds that a user can then use in a Tcl script. For example, the server module loaded by Eggdrop is what creates the “jump” Tcl command, which causes tells the Eggdrop to jump to the next server in its server list.

      +

      There are a few required functions a module must perform in order to properly work with Eggdrop

      +
      +

      Module Header

      +

      A module should include license information. This tells other open source users how they are allowed to use the code. Eggdrop uses GPL 2.0 licensing, and our license information looks like this:

      +
      /*
      +* 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 2
      +* 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, write to the Free Software
      +* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
      +*/
      +
      +
      +
      +
      +

      Required Code

      +

      For this section, you don’t necessarily need to understand what it is doing, but this code is required for a module to function.

      +

      You’ll next want to name your module:

      +
      #define MODULE_NAME "woobie"
      +
      +
      +

      Declare your own function tables (you don’t need to understand this part; you just need to copy/paste it):

      +
      #undef global
      +static Function *global = NULL, *server_funcs = NULL;
      +EXPORT_SCOPE char *woobie_start();
      +
      +
      +

      Next are two memory-related functions used by the core Eggdrop .status and .module commands:

      +
      static int woobie_expmem()
      +{
      +  int size = 0;
      +
      +  return size;
      +}
      +
      +static void woobie_report(int idx, int details)
      +{
      +  if (details) {
      +    int size = woobie_expmem();
      +
      +    dprintf(idx, "    Using %d byte%s of memory\n", size,
      +            (size != 1) ? "s" : "");
      +  }
      +}
      +
      +
      +

      This function is called when Eggdrop loads the module:

      +
      char *woobie_start(Function *global_funcs)
      +{
      +  global = global_funcs;
      +
      +  /* Register the module. */
      +  module_register(MODULE_NAME, woobie_table, 2, 1);
      +  /*                                            ^--- minor module version
      +   *                                         ^------ major module version
      +   *                           ^-------------------- module function table
      +   *              ^--------------------------------- module name
      +   */
      +
      +  if (!module_depend(MODULE_NAME, "eggdrop", 108, 0)) {
      +    module_undepend(MODULE_NAME);
      +    return "This module requires Eggdrop 1.8.0 or later.";
      +  }
      +
      +
      +

      This next function is used to unload the module:

      +
      static char *woobie_close()
      +{
      +  module_undepend(MODULE_NAME);
      +  return NULL;
      +}
      +
      +
      +

      This creates a function table that is exported to Eggdrop. In other words, these are commands that are made available to the Eggdrop core and other modules. At minimum, the following functions must be exported:

      +
      static Function woobie_table[] = {
      +  (Function) woobie_start,
      +  (Function) woobie_close,
      +  (Function) woobie_expmem,
      +  (Function) woobie_report,
      +};
      +
      +
      +

      At this point, you should have a module that compiles and can be loaded by Eggdrop- but dosen’t really do anything yet. We’ll change that in the next section!

      +
      +
      +

      Adding a Partyline Command

      +

      A partyline command function accepts three arguments- a pointer to the user record of the user that called the command; the idx the user was on when calling the command; and a pointer to the arguments appended to the command. A command should immediately log that it was called to the LOG_CMDS log level, and then run its desired code. This simple example prints “WOOBIE” to the partyline idx of the user that called it:

      +
      static int cmd_woobie(struct userrec *u, int idx, char *par)
      +{
      +  putlog(LOG_CMDS, "*", "#%s# woobie", dcc[idx].nick);
      +  dprintf(idx, "WOOBIE!\n");
      +  return 0;
      +}
      +
      +
      +

      If you add partyline commands, you need to create a table which links the new command name to the function it should call. This can be done like so:

      +
      static cmd_t mywoobie[] = {
      +  /* command  flags  function     tcl-name */
      +  {"woobie",  "",    cmd_woobie,  NULL},
      +  {NULL,      NULL,  NULL,        NULL}  /* Mark end. */
      +};
      +
      +
      +

      The tcl-name field can be a name for a Tcl command that will also call the partyline command, or it can be left as NULL.

      +
      +
      +

      Adding a Tcl Command

      +

      Eggdrop uses the Tcl C API library to interact with the Tcl interpreter. Learning this API is outside the scope of this tutorial, but this example Tcl command will echo the provided argument:

      +
      static int tcl_echome STDVAR {
      +  BADARGS(2, 2, " arg");
      +
      +  if (strcmp(argv[1], "llama") {
      +    Tcl_AppendResult(irp, "You said: ", argv[1], NULL);
      +    return TCL_OK;
      +  } else {
      +    Tcl_AppendResult(irp, "illegal word!");
      +    return TCL_ERROR;
      +  }
      +}
      +
      +A few notes on this example. BADARGS is a macro that checks the input provided to the Tcl command. The first argument BADARGS accepts is the minimum number of paramters the Tcl command must accept (including the command itself). The second argument is the maximum number of parameters that BADARGS will accept. The third argument is the help text that will be displayed if these boundaries are exceeded. For example, BADARGS(2, 4, " name ?date? ?place?") requires at least one argument to be passed, and a maximum of three arguments. Eggdrop code style is to enclose optional arguments between qusetion marks in the help text.
      +
      +
      +

      Similar to adding a partyline command, you also have to create a function table for a new Tcl command:

      +
      static tcl_cmds mytcl[] = {
      +  {"echome",           tcl_echome},
      +  {NULL,                   NULL}   /* Required to mark end of table */
      +};
      +
      +
      +

      And now the newly-created Tcl command ‘echome’ is available for use in a script!

      +
      +
      +

      Adding a Tcl Bind

      +

      A Tcl bind is a command that is activated when a certain condition is met. With Eggdrop, these are usually linked to receiving messages or other IRC events. To create a bind, you must first register the bind type with Eggdrop when the module is loaded (you added the woobie_start() and woobie_close functions earlier, you still need all that earlier code in here as well):

      +
      static p_tcl_bind_list H_woob;
      +
      +...
      +
      +char *woobie_start(Function *global_funcs)
      +{
      +  ...
      +  H_woob = add_bind_table("woobie", HT_STACKABLE, woobie_2char);
      +}
      +
      +
      +

      And then remove the binds when the module is unloaded:

      +
      static char *woobie_close()
      +{
      +  ...
      +  del_bind_table(H_woob);
      +}
      +
      +
      +

      Here, “woobie” is the name of the bind (similar to the PUB, MSG, JOIN types of binds you already see in tcl-commands.doc). HT_STACKABLE means you can have multiple binds of this type. “woobie_2char” defines how many arguments the bind will take, and we’ll talk about that next.

      +
      +

      Defining bind arguments

      +

      The following code example defines a bind that will take two arguments:

      +
      static int woobie_2char STDVAR
      +{
      +  Function F = (Function) cd;
      +
      +  BADARGS(3, 3, " nick chan");
      +
      +  CHECKVALIDITY(woobie_2char);
      +  F(argv[1], argv[2]);
      +  return TCL_OK;
      +}
      +
      +
      +

      And this example defines a bind that will take three arguments:

      +
      static int woobie_3char STDVAR
      +{
      +  Function F = (Function) cd;
      +
      +  BADARGS(4, 4, " foo bar moo");
      +
      +  CHECKVALIDITY(woobie_3char);
      +  F(argv[1], argv[2], argv[3]);
      +  return TCL_OK;
      +}
      +
      +
      +

      Like before, BADARGS still checks that the number of arguments passed is correct, and outputs help text if it is not. The rest is boilerplate code to pass the arguments when the bind is called.

      +
      +
      +

      Calling the Bind

      +

      To call the bind, Eggdrop coding style it to name that function “check_tcl_bindname”. So here, whenever we reach a point in code that should trigger the bind, we’ll call check_tcl_woobie() and pass the arguments we defined- in this case, two arguments that woobie_2char was created to handle. Here is some sample code:

      +
      check_tcl_woobie(chan, nick);
      +
      +
      +static int check_tcl_woobie(char *chan, char *nick, char *userhost) {
      +  int x;
      +  char mask[1024];
      +  struct flag_record fr = { FR_GLOBAL | FR_CHAN, 0, 0, 0, 0, 0 };
      +
      +  snprintf(mask, sizeof mask, "%s %s!%s",
      +                                chan, nick, userhost);
      +  Tcl_SetVar(interp, "_woob1", nick ? (char *) nick : "", 0);
      +  Tcl_SetVar(interp, "_woob2", chan, 0);
      +  x = check_tcl_bind(H_woob, mask, &fr, " $_woob1 $_woob2",
      +        MATCH_MASK | BIND_STACKABLE);
      +  return (x == BIND_EXEC_LOG);
      +}
      +
      +
      +

      Now that we have encountered a condition that triggers the bind, we need to check it against the binds the user has loaded in scripts and see if it matches those conditions. This is done with check_tcl_bind(), called with the bind type, the userhost of the user, the flag record of the user if it exists, the bind arguments, and bind options.

      +
      +
      +
      +

      Exporting the Bind

      +

      Do we need to do this?

      +
      +
      + + +
      +
      +
      +
      +
      +
      +
      + + + + + \ No newline at end of file diff --git a/doc/sphinx_source/index.rst b/doc/sphinx_source/index.rst index dca64902a..5e0178241 100644 --- a/doc/sphinx_source/index.rst +++ b/doc/sphinx_source/index.rst @@ -78,6 +78,7 @@ The Eggheads development team can be found lurking on #eggdrop on the Libera net tutorials/firststeps tutorials/tlssetup tutorials/firstscript + tutorials/module.rst .. toctree:: :caption: Eggdrop Modules @@ -86,6 +87,7 @@ The Eggheads development team can be found lurking on #eggdrop on the Libera net modules/index modules/included modules/writing + modules/internals.rst .. toctree:: :caption: About Eggdrop diff --git a/doc/sphinx_source/modules/internals.rst b/doc/sphinx_source/modules/internals.rst new file mode 100644 index 000000000..5e026a391 --- /dev/null +++ b/doc/sphinx_source/modules/internals.rst @@ -0,0 +1,264 @@ +Eggdrop Bind Internals +====================== + +This document is intended for C developers who want to understand how Eggdrop’s Tcl binds or C binds work. + +For documentation purposes the “dcc” bind type is used as an example. + +It already exists and is suitable to illustrate the details of bind handling in Eggdrop. + +Note: All code snippets are altered for brevity and simplicity, see original source code for the full and current versions. + +Bind Table Creation +------------------- + +The bind table is added by calling, either at module initialization or startup:: + + /* Global symbol, available to other C files with + * extern p_tcl_bind_list H_dcc; + */ + p_tcl_bind_list H_dcc; + + /* Creating the bind table: + * @param[in] const char *name Limited in length, see tclhash.h + * @param[in] int flags HT_STACKABLE or 0 + * @param[in] IntFunc Function pointer to C handler + * @return p_tcl_bind_list aka (tcl_bind_list_t *) + */ + H_dcc = add_bind_table("dcc", 0, builtin_dcc); + +What the :code:`C handler` does is explained later, because a lot happens before it is actually called. :code:`IntFunc` is a generic function pointer that returns an :code:`int` with arbitrary arguments. + +:code:`H_dcc` can be exported from core and imported into modules as any other variable or function. That should be explained in a separate document. + +Stackable Binds: HT_STACKABLE +----------------------------- + +:code:`HT_STACKABLE` means that multiple binds can exist for the same mask. +:: + + bind dcc - test proc1; # not stackable + bind dcc - test proc2; # overwrites the first one, only proc2 will be called + +It does not automatically call multiple binds that match, see later in the `Triggering any Bind`_ section for details. + +Tcl Binding +----------- + +After the bind table is created with :code:`add_bind_table`, Tcl procs can already be registered to this bind by calling:: + + bind dcc -|- test myproc + proc myproc {args} { + putlog "myproc was called, argument list: '[join $args ',']'" + return 0 + } + +Of course it is not clear so far: + +* If flags :code:`-|-` matter for this bind at all and what they are checked against +* If channel flags have a meaning or global/bot only +* What :code:`test` is matched against to see if the bind should trigger +* Which arguments :code:`myproc` receives, the example just accepts all arguments + +Triggering the Bind +------------------- + +To trigger the bind and call it with the desired arguments, a function is created. +:: + + int check_tcl_dcc(const char *cmd, int idx, const char *args) { + struct flag_record fr = { FR_GLOBAL | FR_CHAN, 0, 0, 0, 0, 0 }; + int x; + char s[11]; + + get_user_flagrec(dcc[idx].user, &fr, dcc[idx].u.chat->con_chan); + egg_snprintf(s, sizeof s, "%ld", dcc[idx].sock); + Tcl_SetVar(interp, "_dcc1", (char *) dcc[idx].nick, 0); + Tcl_SetVar(interp, "_dcc2", (char *) s, 0); + Tcl_SetVar(interp, "_dcc3", (char *) args, 0); + x = check_tcl_bind(H_dcc, cmd, &fr, " $_dcc1 $_dcc2 $_dcc3", + MATCH_PARTIAL | BIND_USE_ATTR | BIND_HAS_BUILTINS); + /* snip ..., return code handling */ + return 0; + } + +The global Tcl variables :code:`$_dcc1 $_dcc2 $_dcc3` are used as temporary string variables and passed as arguments to the registered Tcl proc. + +This shows which arguments the callbacks in Tcl get: + +* the nickname of the DCC chat user (handle of the user) +* the IDX (socket id) of the partyline so :code:`[putdcc]` can respond back +* another string argument that depends on the caller + +The call to :code:`check_tcl_dcc` can be found in the DCC parsing in `src/dcc.c`. + +Triggering any Bind +------------------- + +`check_tcl_bind` is used by all binds and does the following:: + + /* Generic function to call one/all matching binds + * @param[in] tcl_bind_list_t *tl Bind table (e.g. H_dcc) + * @param[in] const char *match String to match the bind-masks against + * @param[in] struct flag_record *atr Flags of the user calling the bind + * @param[in] const char *param Arguments to add to the bind callback proc (e.g. " $_dcc1 $_dcc2 $_dcc3") + * @param[in] int match_type Matchtype and various flags + * @returns int Match result code + */ + + /* Source code changed, only illustrative */ + int check_tcl_bind(tcl_bind_list_t *tl, const char *match, struct flag_record *atr, const char *param, int match_type) { + int x = BIND_NOMATCH; + for (tm = tl->first; tm && !finish; tm_last = tm, tm = tm->next) { + /* Check if bind mask matches */ + if (!check_bind_match(match, tm->mask, match_type)) + continue; + for (tc = tm->first; tc; tc = tc->next) { + /* Check if the provided flags suffice for this command. */ + if (check_bind_flags(&tc->flags, atr, match_type)) { + tc->hits++; + /* not much more than Tcl_Eval(interp, " "); and grab the result */ + x = trigger_bind(tc->func_name, param, tm->mask); + } + } + } + return x; + } + +The supplied flags to :code:`check_tcl_bind` in `check_tcl_dcc` are what defines how matching is performed. + +In the case of a DCC bind we had: + +* Matchtype :code:`MATCH_PARTIAL`: Prefix-Matching if the command can be uniquely identified (e.g. dcc .help calls .help) +* Additional flag :code:`BIND_USE_ATTR`: Flags are checked +* Additional flag :code:`BIND_HAS_BUILTINS`: Something with flag matching, unsure + +For details on the available match types (wildcard matching, exact matching, etc.) see :code:`src/tclegg.h`. Additional flags are also described there as well as the return codes of :code:`check_tcl_bind` (e.g. :code:`BIND_NOMATCH`). + +Note: For a bind type to be stackable it needs to be registered with :code:`HT_STACKABLE` AND :code:`check_tcl_bind` must be called with :code:`BIND_STACKABLE`. + +C Binding +--------- + +To create a C function that is called by the bind, Eggdrop provides the :code:`add_builtins` function. +:: + + /* Add a list of C function callbacks to a bind + * @param[in] tcl_bind_list_t * the bind type (e.g. H_dcc) + * @param[in] cmd_t * a NULL-terminated table of binds: + * cmd_t *mycmds = { + * {char *name, char *flags, IntFunc function, char *tcl_name}, + * ..., + * {NULL, NULL, NULL, NULL} + * }; + */ + void add_builtins(tcl_bind_list_t *tl, cmd_t *cc) { + char p[1024]; + cd_tcl_cmd tclcmd; + + tclcmd.name = p; + tclcmd.callback = tl->func; + for (i = 0; cc[i].name; i++) { + /* Create Tcl command with automatic or given names *:, e.g. + * - H_raw {"324", "", got324, "irc:324"} => *raw:irc:324 + * - H_dcc {"boot", "t", cmd_boot, NULL} => *dcc:boot + */ + egg_snprintf(p, sizeof p, "*%s:%s", tl->name, cc[i].funcname ? cc[i].funcname : cc[i].name); + /* arbitrary void * can be included, we include C function pointer */ + tclcmd.cdata = (void *) cc[i].func; + add_cd_tcl_cmd(tclcmd); + bind_bind_entry(tl, cc[i].flags, cc[i].name, p); + } + } + +It automatically creates Tcl commands (e.g. :code:`*dcc:cmd_boot`) that will call the `C handler` from `add_bind_table` in the first section `Bind Table Creation`_ and it gets a context (void \*) argument with the C function it is supposed to call (e.g. `cmd_boot()`). + +Now we can actually look at the C function handler for dcc as an example and what it has to implement. + +C Handler +--------- + +The example handler for DCC looks as follows:: + + /* Typical Tcl_Command arguments, just like e.g. tcl_putdcc is a Tcl/C command for [putdcc] */ + static int builtin_dcc (ClientData cd, Tcl_Interp *irp, int argc, char *argv[]) { + int idx; + /* F: The C function we want to call, if the bind is okay, e.g. cmd_boot() */ + Function F = (Function) cd; + + /* Task of C function: verify argument count and syntax as any Tcl command */ + BADARGS(4, 4, " hand idx param"); + + /* C Macro only used in C handlers for bind types, sanity checks the Tcl proc name + * for *: and that we are in the right C handler + */ + CHECKVALIDITY(builtin_dcc); + + idx = findidx(atoi(argv[2])); + if (idx < 0) { + Tcl_AppendResult(irp, "invalid idx", NULL); + return TCL_ERROR; + } + + /* Call the desired C function, e.g. cmd_boot() with their arguments */ + F(dcc[idx].user, idx, argv[3]); + Tcl_ResetResult(irp); + Tcl_AppendResult(irp, "0", NULL); + return TCL_OK; + } + +This is finally the part where we see the arguments a C function gets for a DCC bind as opposed to a Tcl proc. + +code:`F(dcc[idx].user, idx, argv[3])`: + +* User information as struct userrec * +* IDX as int +* The 3rd string argument from the Tcl call to \*dcc:cmd_boot, which was :code:`$_dcc3` which was :code:`args` to :code:`check_tcl_dcc` which was everything after the dcc command + +So this is how we register C callbacks for binds with the correct arguments:: + + /* We know the return value is ignored because the return value of F + * in builtin_dcc is ignored, so it can be void, but for other binds + * it could be something else and used in the C handler for the bind. + */ + void cmd_boot(struct userrec *u, int idx, char *par) { /* snip */ } + + cmd_t *mycmds = { + {"boot", "t", (IntFunc) cmd_boot, NULL /* automatic name: *dcc:boot */}, + {NULL, NULL, NULL, NULL} + }; + add_builtins(H_dcc, mycmds); + +Summary +------- + +In summary, this is how the dcc bind is called: + +* :code:`check_tcl_dcc()` creates Tcl variables :code:`$_dcc1 $_dcc2 $_dcc3` and lets :code:`check_tcl_bind` call the binds +* Tcl binds are done at this point +* C binds mean the Tcl command associated with the bind is :code:`*dcc:boot` which calls :code:`builtin_dcc` which gets :code:`cmd_boot` as ClientData cd argument +* :code:`gbuildin_dcc` performs some sanity checking to avoid crashes and then calls :code:`cmd_boot()` aka :code:`F()` with the arguments it wants C callbacks to have + +Example edited and annotated gdb backtrace in :code::`cmd_boot` after doing :code:`.boot test` on the partyline as user :code:`thommey` with typical owner flags. +:: + + #0 cmd_boot (u=0x55e8bd8a49b0, idx=4, par=0x55e8be6a0010 "test") at cmds.c:614 + *u = {next = 0x55e8bd8aec90, handle = "thommey", flags = 8977024, flags_udef = 0, chanrec = 0x55e8bd8aeae0, entries = 0x55e8bd8a4a10} + #1 builtin_dcc (cd=0x55e8bbf002d0 , irp=0x55e8bd59b1c0, argc=4, argv=0x55e8bd7e3e00) at tclhash.c:678 + idx = 4 + argv = {0x55e8be642fa0 "*dcc:boot", 0x55e8be9f6bd0 "thommey", 0x55e8be7d9020 "4", 0x55e8be6a0010 "test", 0x0} + F = 0x55e8bbf002d0 + #5 Tcl_Eval (interp=0x55e8bd59b1c0, script = "*dcc:boot $_dcc1 $_dcc2 $_dcc3") from /usr/lib/x86_64-linux-gnu/libtcl8.6.so + Tcl: return $_dcc1 = "thommey" + Tcl: return $_dcc2 = "4" + Tcl: return $_dcc3 = "test" + Tcl: return $lastbind = "boot" (set automatically by trigger_bind) + #8 trigger_bind (proc=proc@entry=0x55e8bd5efda0 "*dcc:boot", param=param@entry=0x55e8bbf4112b " $_dcc1 $_dcc2 $_dcc3", mask=mask@entry=0x55e8bd5efd40 "boot") at tclhash.c:742 + #9 check_tcl_bind (tl=0x55e8bd5eecb0 , match=match@entry=0x7ffcf3f9dac1 "boot", atr=atr@entry=0x7ffcf3f9d100, param=param@entry=0x55e8bbf4112b " $_dcc1 $_dcc2 $_dcc3", match_type=match_type@entry=80) at tclhash.c:942 + proc = 0x55e8bd5efda0 "*dcc:boot" + mask = 0x55e8bd5efd40 "boot" + brkt = 0x7ffcf3f9dac6 "test" + #10 check_tcl_dcc (cmd=cmd@entry=0x7ffcf3f9dac1 "boot", idx=idx@entry=4, args=0x7ffcf3f9dac6 "test") at tclhash.c:974 + fr = {match = 5, global = 8977024, udef_global = 0, bot = 0, chan = 0, udef_chan = 0} + #11 dcc_chat (idx=idx@entry=4, buf=, i=) at dcc.c:1068 + v = 0x7ffcf3f9dac1 "boot" diff --git a/doc/sphinx_source/modules/writing.rst b/doc/sphinx_source/modules/writing.rst index da222fbe5..ceeabb4fe 100644 --- a/doc/sphinx_source/modules/writing.rst +++ b/doc/sphinx_source/modules/writing.rst @@ -1,5 +1,7 @@ -Writing an Eggdrop Module -========================= +.. _writing_module: + +How to Write an Eggdrop Module +============================== Note: This is for a simple module of 1 source file. diff --git a/doc/sphinx_source/tutorials/module.rst b/doc/sphinx_source/tutorials/module.rst new file mode 100644 index 000000000..b4743484f --- /dev/null +++ b/doc/sphinx_source/tutorials/module.rst @@ -0,0 +1,235 @@ +Writing a Basic Eggdrop Module +============================== + +An Eggdrop module is a piece of C code that can be loaded (or unloaded) onto the core Eggdrop code. A module differs from a Tcl script in that modules must be compiled and then loaded, whereas scripts can be edited and loaded directly. Importantly, a module can be written to create new Eggdrop-specific Tcl commands and binds that a user can then use in a Tcl script. For example, the server module loaded by Eggdrop is what creates the "jump" Tcl command, which causes tells the Eggdrop to jump to the next server in its server list. + +There are a few required functions a module must perform in order to properly work with Eggdrop + +Module Header +------------- + +A module should include license information. This tells other open source users how they are allowed to use the code. Eggdrop uses GPL 2.0 licensing, and our license information looks like this:: + + /* + * 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 2 + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +Required Code +------------- + +For this section, you don't necessarily need to understand what it is doing, but this code is required for a module to function. If you want to learn more about this, check out :ref:`writing_module` + +You'll next want to name your module:: + + #define MODULE_NAME "woobie" + +Declare your own function tables (again, you don't need to understand this part; you just need to copy/paste it):: + + #undef global + static Function *global = NULL, *server_funcs = NULL; + EXPORT_SCOPE char *woobie_start(); + +Next are two memory-related functions used by the core Eggdrop .status and .module commands:: + + static int woobie_expmem() + { + int size = 0; + + return size; + } + + static void woobie_report(int idx, int details) + { + if (details) { + int size = woobie_expmem(); + + dprintf(idx, " Using %d byte%s of memory\n", size, + (size != 1) ? "s" : ""); + } + } + +This function is called when Eggdrop loads the module:: + + char *woobie_start(Function *global_funcs) + { + global = global_funcs; + + /* Register the module. */ + module_register(MODULE_NAME, woobie_table, 2, 1); + /* ^--- minor module version + * ^------ major module version + * ^-------------------- module function table + * ^--------------------------------- module name + */ + + if (!module_depend(MODULE_NAME, "eggdrop", 108, 0)) { + module_undepend(MODULE_NAME); + return "This module requires Eggdrop 1.8.0 or later."; + } + +This next function is used to unload the module:: + + static char *woobie_close() + { + module_undepend(MODULE_NAME); + return NULL; + } + +This creates a function table that is exported to Eggdrop. In other words, these are commands that are made available to the Eggdrop core and other modules. At minimum, the following functions must be exported:: + + static Function woobie_table[] = { + (Function) woobie_start, + (Function) woobie_close, + (Function) woobie_expmem, + (Function) woobie_report, + }; + +At this point, you should have a module that compiles and can be loaded by Eggdrop- but dosen't really do anything yet. We'll change that in the next section! + +Adding a Partyline Command +-------------------------- + +A partyline command function accepts three arguments- a pointer to the user record of the user that called the command; the idx the user was on when calling the command; and a pointer to the arguments appended to the command. A command should immediately log that it was called to the LOG_CMDS log level, and then run its desired code. This simple example prints "WOOBIE" to the partyline idx of the user that called it:: + + static int cmd_woobie(struct userrec *u, int idx, char *par) + { + putlog(LOG_CMDS, "*", "#%s# woobie", dcc[idx].nick); + dprintf(idx, "WOOBIE!\n"); + return 0; + } + +If you add partyline commands, you need to create a table which links the new command name to the function it should call. This can be done like so:: + + static cmd_t mywoobie[] = { + /* command flags function tcl-name */ + {"woobie", "", cmd_woobie, NULL}, + {NULL, NULL, NULL, NULL} /* Mark end. */ + }; + +The tcl-name field can be a name for a Tcl command that will also call the partyline command, or it can be left as NULL. + +Adding a Tcl Command +-------------------- + +Eggdrop uses the Tcl C API library to interact with the Tcl interpreter. Learning this API is outside the scope of this tutorial, but this example Tcl command will echo the provided argument:: + + + static int tcl_echome STDVAR { + BADARGS(2, 2, " arg"); + + if (strcmp(argv[1], "llama") { + Tcl_AppendResult(irp, "You said: ", argv[1], NULL); + return TCL_OK; + } else { + Tcl_AppendResult(irp, "illegal word!"); + return TCL_ERROR; + } + } + + A few notes on this example. BADARGS is a macro that checks the input provided to the Tcl command. The first argument BADARGS accepts is the minimum number of paramters the Tcl command must accept (including the command itself). The second argument is the maximum number of parameters that BADARGS will accept. The third argument is the help text that will be displayed if these boundaries are exceeded. For example, BADARGS(2, 4, " name ?date? ?place?") requires at least one argument to be passed, and a maximum of three arguments. Eggdrop code style is to enclose optional arguments between qusetion marks in the help text. + +Similar to adding a partyline command, you also have to create a function table for a new Tcl command:: + + static tcl_cmds mytcl[] = { + {"echome", tcl_echome}, + {NULL, NULL} /* Required to mark end of table */ + }; + +And now the newly-created Tcl command 'echome' is available for use in a script! + +Adding a Tcl Bind +----------------- + +A Tcl bind is a command that is activated when a certain condition is met. With Eggdrop, these are usually linked to receiving messages or other IRC events. To create a bind, you must first register the bind type with Eggdrop when the module is loaded (you added the woobie_start() and woobie_close functions earlier, you still need all that earlier code in here as well):: + + static p_tcl_bind_list H_woob; + + ... + + char *woobie_start(Function *global_funcs) + { + ... + H_woob = add_bind_table("woobie", HT_STACKABLE, woobie_2char); + } + +And then remove the binds when the module is unloaded:: + + static char *woobie_close() + { + ... + del_bind_table(H_woob); + } + +Here, "woobie" is the name of the bind (similar to the PUB, MSG, JOIN types of binds you already see in tcl-commands.doc). HT_STACKABLE means you can have multiple binds of this type. "woobie_2char" defines how many arguments the bind will take, and we'll talk about that next. + +Defining bind arguments +^^^^^^^^^^^^^^^^^^^^^^^ + +The following code example defines a bind that will take two arguments:: + + static int woobie_2char STDVAR + { + Function F = (Function) cd; + + BADARGS(3, 3, " nick chan"); + + CHECKVALIDITY(woobie_2char); + F(argv[1], argv[2]); + return TCL_OK; + } + +And this example defines a bind that will take three arguments:: + + static int woobie_3char STDVAR + { + Function F = (Function) cd; + + BADARGS(4, 4, " foo bar moo"); + + CHECKVALIDITY(woobie_3char); + F(argv[1], argv[2], argv[3]); + return TCL_OK; + } + +Like before, BADARGS still checks that the number of arguments passed is correct, and outputs help text if it is not. The rest is boilerplate code to pass the arguments when the bind is called. + +Calling the Bind +^^^^^^^^^^^^^^^^ + +To call the bind, Eggdrop coding style it to name that function "check_tcl_bindname". So here, whenever we reach a point in code that should trigger the bind, we'll call check_tcl_woobie() and pass the arguments we defined- in this case, two arguments that woobie_2char was created to handle. Here is some sample code:: + + check_tcl_woobie(chan, nick); + + + static int check_tcl_woobie(char *chan, char *nick, char *userhost) { + int x; + char mask[1024]; + struct flag_record fr = { FR_GLOBAL | FR_CHAN, 0, 0, 0, 0, 0 }; + + snprintf(mask, sizeof mask, "%s %s!%s", + chan, nick, userhost); + Tcl_SetVar(interp, "_woob1", nick ? (char *) nick : "", 0); + Tcl_SetVar(interp, "_woob2", chan, 0); + x = check_tcl_bind(H_woob, mask, &fr, " $_woob1 $_woob2", + MATCH_MASK | BIND_STACKABLE); + return (x == BIND_EXEC_LOG); + } + +Now that we have encountered a condition that triggers the bind, we need to check it against the binds the user has loaded in scripts and see if it matches those conditions. This is done with check_tcl_bind(), called with the bind type, the userhost of the user, the flag record of the user if it exists, the bind arguments, and bind options. + +Exporting the Bind +------------------ + +Do we need to do this? From 23386ce96e1828c6b8f4dc5eee50467d8cf286ab Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Mon, 13 Feb 2023 00:50:05 +0000 Subject: [PATCH 159/201] Fix load of null pointer Found by: 0_o I am EMPTY, mister EMPTY, ZarTek-Creole Patch by: michaelortmann Fixes: #1389 --- src/net.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/net.c b/src/net.c index 7539500fe..30e1f4cb8 100644 --- a/src/net.c +++ b/src/net.c @@ -1700,6 +1700,12 @@ char *traced_natip(ClientData cd, Tcl_Interp *irp, EGG_CONST char *name1, int r; struct in_addr ia; + /* Recover trace in case of unset. */ + if (flags & TCL_TRACE_DESTROYED) { + Tcl_TraceVar2(irp, name1, name2, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, traced_natip, cd); + return NULL; + } + value = Tcl_GetVar2(irp, name1, name2, TCL_GLOBAL_ONLY); if (*value) { r = inet_pton(AF_INET, value, &ia); From ed12d430b88ff820eabdfa2fe6cdb081e13ff7d0 Mon Sep 17 00:00:00 2001 From: Thomas Sader Date: Mon, 13 Feb 2023 22:07:22 +0100 Subject: [PATCH 160/201] Raise Tcl requirement to 8.5 Found by: mortmann Patch by: thommey Fixes: #1403 Eggdrop will not compile with Tcl8.5 DictObj support since 1.9.0 (oops). --- aclocal.m4 | 14 ++------------ config.h.in | 4 ---- configure.ac | 1 - doc/BUG-REPORT | 2 -- src/main.c | 7 ------- src/main.h | 12 ++---------- src/tcl.c | 25 ++----------------------- 7 files changed, 6 insertions(+), 59 deletions(-) diff --git a/aclocal.m4 b/aclocal.m4 index fc810bc45..4e8aab300 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -1087,14 +1087,14 @@ dnl AC_DEFUN([EGG_TCL_CHECK_VERSION], [ - if test "x$TCL_MAJOR_VERSION" = x || test "x$TCL_MINOR_VERSION" = x || test $TCL_MAJOR_VERSION -lt 8 || test $TCL_MAJOR_VERSION -eq 8 -a $TCL_MINOR_VERSION -lt 3; then + if test "x$TCL_MAJOR_VERSION" = x || test "x$TCL_MINOR_VERSION" = x || test $TCL_MAJOR_VERSION -lt 8 || test $TCL_MAJOR_VERSION -eq 8 -a $TCL_MINOR_VERSION -lt 5; then cat << EOF >&2 configure: error: Your Tcl version is much too old for Eggdrop to use. You should download and compile a more recent version. The most reliable current version is $tclrecommendver and can be downloaded from - ${tclrecommendsite}. We require at least Tcl 8.3. + ${tclrecommendsite}. We require at least Tcl 8.5. See doc/COMPILE-GUIDE's 'Tcl Detection and Installation' section for more information. @@ -1114,16 +1114,6 @@ dnl AC_DEFUN([EGG_CACHE_UNSET], [unset $1]) -dnl EGG_TCL_CHECK_NOTIFIER_INIT -dnl -AC_DEFUN([EGG_TCL_CHECK_NOTIFIER_INIT], -[ - if test $TCL_MAJOR_VERSION -gt 8 || test $TCL_MAJOR_VERSION -eq 8 -a $TCL_MINOR_VERSION -ge 4; then - AC_DEFINE(HAVE_TCL_NOTIFIER_INIT, 1, [Define for Tcl that has the Tcl_NotifierProcs struct member initNotifierProc (8.4 and later).]) - fi -]) - - dnl EGG_SUBST_EGGVERSION() dnl AC_DEFUN([EGG_SUBST_EGGVERSION], diff --git a/config.h.in b/config.h.in index a0f0bbfe1..4e56afd4a 100644 --- a/config.h.in +++ b/config.h.in @@ -296,10 +296,6 @@ /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H -/* Define for Tcl that has the Tcl_NotifierProcs struct member - initNotifierProc (8.4 and later). */ -#undef HAVE_TCL_NOTIFIER_INIT - /* Define to 1 if your `struct tm' has `tm_zone'. Deprecated, use `HAVE_STRUCT_TM_TM_ZONE' instead. */ #undef HAVE_TM_ZONE diff --git a/configure.ac b/configure.ac index c101fedf0..c90d97e56 100644 --- a/configure.ac +++ b/configure.ac @@ -136,7 +136,6 @@ EGG_TCL_WITH_TCLLIB EGG_TCL_WITH_TCLINC EGG_TCL_TCLCONFIG EGG_TCL_CHECK_VERSION -EGG_TCL_CHECK_NOTIFIER_INIT EGG_TCL_LUSH diff --git a/doc/BUG-REPORT b/doc/BUG-REPORT index 3c279c599..f60096f40 100644 --- a/doc/BUG-REPORT +++ b/doc/BUG-REPORT @@ -42,8 +42,6 @@ DO NOT SEND HTML E-MAIL TO THE LISTS. 2) INFORMATION ABOUT TCL 2.1) Tcl library version: - ( ) 8.3._ - ( ) 8.4._ ( ) 8.5._ ( ) 8.6._ ( ) Other - Which? ____ diff --git a/src/main.c b/src/main.c index 9ab60c6de..13976ae84 100644 --- a/src/main.c +++ b/src/main.c @@ -981,11 +981,7 @@ static void mainloop(int toplevel) if (!eggbusy) { /* Process all pending tcl events */ -# ifdef REPLACE_NOTIFIER Tcl_ServiceAll(); -# else - while (Tcl_DoOneEvent(TCL_DONT_WAIT | TCL_ALL_EVENTS)); -# endif /* REPLACE_NOTIFIER */ } } @@ -1119,9 +1115,6 @@ int main(int arg_c, char **arg_v) fatal("ERROR: Eggdrop will not run as root!", 0); #endif -#ifndef REPLACE_NOTIFIER - init_threaddata(1); -#endif init_userent(); init_misc(); init_bots(); diff --git a/src/main.h b/src/main.h index 2b11465d5..3dbe592f2 100644 --- a/src/main.h +++ b/src/main.h @@ -45,16 +45,8 @@ # define TCL_PATCH_LEVEL "*unknown*" #endif -#if defined(HAVE_TCL_NOTIFIER_INIT) -# define REPLACE_NOTIFIER -#endif - -#if (((TCL_MAJOR_VERSION == 8) && (TCL_MINOR_VERSION >= 4)) || (TCL_MAJOR_VERSION > 8)) -# ifdef CONST -# define EGG_CONST CONST -# else -# define EGG_CONST -# endif +#ifdef CONST +# define EGG_CONST CONST #else # define EGG_CONST #endif diff --git a/src/tcl.c b/src/tcl.c index 6e02af9e2..ccc4cd8d0 100644 --- a/src/tcl.c +++ b/src/tcl.c @@ -96,8 +96,8 @@ int handlen = HANDLEN; extern Tcl_VarTraceProc traced_myiphostname, traced_natip, traced_remove_pass; -/* Unicode workaround for Tcl versions that only support BMP characters (3 byte utf-8) */ -#if TCL_MAJOR_VERSION == 8 && TCL_MINOR_VERSION >= 5 && TCL_MINOR_VERSION <= 6 && TCL_UTF_MAX < 4 +/* Unicode workaround for Tcl versions (8.5/8.6) that only support BMP characters (3 byte utf-8) */ +#if TCL_MAJOR_VERSION == 8 && TCL_MINOR_VERSION <= 6 && TCL_UTF_MAX < 4 # define TCL_WORKAROUND_UNICODESUP 1 struct tcl_unicodesup_info { const char *subcmd; @@ -548,7 +548,6 @@ extern tcl_cmds tcluser_cmds[], tcldcc_cmds[], tclmisc_cmds[], extern tcl_cmds tcltls_cmds[]; #endif -#ifdef REPLACE_NOTIFIER /* The tickle_*() functions replace the Tcl Notifier * The tickle_*() functions can be called by Tcl threads */ @@ -619,18 +618,6 @@ struct threaddata *threaddata() return td; } -#else /* REPLACE_NOTIFIER */ - -int tclthreadmainloop() { return 0; } - -struct threaddata *threaddata() -{ - static struct threaddata tsd; - return &tsd; -} - -#endif /* REPLACE_NOTIFIER */ - void init_threaddata(int mainthread) { struct threaddata *td = threaddata(); @@ -915,15 +902,12 @@ void init_unicodesup(void) */ void init_tcl(int argc, char **argv) { -#ifdef REPLACE_NOTIFIER Tcl_NotifierProcs notifierprocs; -#endif /* REPLACE_NOTIFIER */ const char *encoding; int i, j; char *langEnv, pver[1024] = ""; -#ifdef REPLACE_NOTIFIER egg_bzero(¬ifierprocs, sizeof(notifierprocs)); notifierprocs.initNotifierProc = tickle_InitNotifier; notifierprocs.createFileHandlerProc = tickle_CreateFileHandler; @@ -934,7 +918,6 @@ void init_tcl(int argc, char **argv) notifierprocs.alertNotifierProc = tickle_AlertNotifier; Tcl_SetNotifier(¬ifierprocs); -#endif /* REPLACE_NOTIFIER */ /* This must be done *BEFORE* Tcl_SetSystemEncoding(), * or Tcl_SetSystemEncoding() will cause a segfault. @@ -1247,11 +1230,7 @@ int tcl_threaded() */ int fork_before_tcl() { -#ifndef REPLACE_NOTIFIER - return tcl_threaded(); -#else return 0; -#endif } time_t get_expire_time(Tcl_Interp * irp, const char *s) { From 98a53aa99121379bf4b7bf5f777666f153ee326f Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Tue, 14 Feb 2023 00:17:13 +0000 Subject: [PATCH 161/201] Fix tcl service mode crash Found by: MacinMan Patch by: michaelortmann Fixes: #1351 Fixes: #1352 Fix crash - add tcl service mode hook stub / enhance doc --- INSTALL | 6 ++++-- doc/COMPILE-GUIDE | 12 ++++++------ src/tcl.c | 13 +++++++++++-- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/INSTALL b/INSTALL index 1b355fd85..6304d2628 100644 --- a/INSTALL +++ b/INSTALL @@ -19,6 +19,8 @@ Eggdrop uses the GNU autoconfigure scripts to make things easier. correctly compile Eggdrop. It will also try to find Tcl, which is required to compile. + For macOS tcl and openssl see doc/COMPILE-GUIDE. + 2. Type either 'make config' or 'make iconfig' to determine which @@ -158,5 +160,5 @@ the README file. If not, then READ IT!&@#%@! Have fun with Eggdrop! - Copyright (C) 1997 Robey Pointer Copyright (C) 1999 - 2022 Eggheads - Development Team + Copyright (C) 1997 Robey Pointer + Copyright (C) 1999 - 2022 Eggheads Development Team diff --git a/doc/COMPILE-GUIDE b/doc/COMPILE-GUIDE index 54e98d32f..92ee2f4fb 100644 --- a/doc/COMPILE-GUIDE +++ b/doc/COMPILE-GUIDE @@ -1,5 +1,5 @@ Eggdrop Compile Guide and FAQ -Last revised: June 9, 2020 +Last revised: November 17, 2022 _____________________________________________________________________ Eggdrop Compile Guide and FAQ @@ -20,7 +20,7 @@ Last revised: June 9, 2020 A. Standard compile process (Linux, FreeBSD, NetBSD, OpenBSD, etc) B. HP-UX B.11.* C. Ultrix - D. Mac OS X + D. macOS (previously OS X and originally Mac OS X) E. AIX F. IRIX G. Solaris / SunOS @@ -187,7 +187,7 @@ Last revised: June 9, 2020 gmake install DEST=/home/user/otherdir - D. Mac OS X + D. macOS Follow the standard compile process in Section A. To compile dynamically (with module support), use 'make eggdrop' instead of 'make'. @@ -210,7 +210,7 @@ Last revised: June 9, 2020 If you notice a module that requires these changes, it would probably be a good idea to let the module's developer know, so it can be fixed. - Note that on Mac OS X, the DYLD_LIBRARY_PATH environment variable should + Note that on macOS, the DYLD_LIBRARY_PATH environment variable should be used instead of LD_LIBRARY_PATH. Install OpenSSL using homebrew: @@ -221,7 +221,7 @@ Last revised: June 9, 2020 Tell configure where to find tcl and openssl: - ./configure --with-tcl=/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Tcl.framework/tclConfig.sh --with-sslinc=/usr/local/opt/openssl/include --with-ssllib=/usr/local/opt/openssl/lib + ./configure --with-tcl=/System/Volumes/Data/Library/Developer/CommandLineTools/SDKs/MacOSX12.1.sdk/System/Library/Frameworks/Tcl.framework/tclConfig.sh -with-sslinc=/usr/local/Cellar/openssl@3/3.0.7/include --with-ssllib=/usr/local/Cellar/openssl@3/3.0.7/lib E. AIX Follow the standard compile process in Section A. To compile dynamically @@ -581,4 +581,4 @@ Last revised: June 9, 2020 _____________________________________________________________________ Copyright (C) 1997 Robey Pointer - Copyright (C) 1999 - 2021 Eggheads Development Team + Copyright (C) 1999 - 2022 Eggheads Development Team diff --git a/src/tcl.c b/src/tcl.c index ccc4cd8d0..ac37316b0 100644 --- a/src/tcl.c +++ b/src/tcl.c @@ -600,8 +600,16 @@ ClientData tickle_InitNotifier() void tickle_AlertNotifier(ClientData cd) { - if (cd) - putlog(LOG_MISC, "*", "stub tickle_AlertNotifier"); + if (cd) { + fatal("Error calling Tcl_AlertNotifier", 0); + } +} + +void tickle_ServiceModeHook(int mode) +{ + if (mode != TCL_SERVICE_ALL) { + fatal("Tcl_ServiceModeHook called with unsupported mode", 0); + } } int tclthreadmainloop(int zero) @@ -916,6 +924,7 @@ void init_tcl(int argc, char **argv) notifierprocs.waitForEventProc = tickle_WaitForEvent; notifierprocs.finalizeNotifierProc = tickle_FinalizeNotifier; notifierprocs.alertNotifierProc = tickle_AlertNotifier; + notifierprocs.serviceModeHookProc = tickle_ServiceModeHook; Tcl_SetNotifier(¬ifierprocs); From de8c50be1a5475afe725e736c7019f9e432e2ba3 Mon Sep 17 00:00:00 2001 From: Michael Ortmann <41313082+michaelortmann@users.noreply.github.com> Date: Tue, 14 Feb 2023 00:19:06 +0000 Subject: [PATCH 162/201] Cleanup deprecated gethostbyname2 Replace deprecated / obsolete gethostbyname2() with POSIX.1-2001 getaddrinfo() --- aclocal.m4 | 1 - src/Makefile.in | 2 +- src/compat/Makefile.in | 16 +++------------ src/compat/compat.h | 1 - src/compat/gethostbyname2.c | 39 ------------------------------------- src/compat/gethostbyname2.h | 37 ----------------------------------- src/md5/Makefile.in | 2 +- src/net.c | 36 ++++++++++++++++++++++------------ src/tcldcc.c | 1 + 9 files changed, 30 insertions(+), 105 deletions(-) delete mode 100644 src/compat/gethostbyname2.c delete mode 100644 src/compat/gethostbyname2.h diff --git a/aclocal.m4 b/aclocal.m4 index 4e8aab300..1d8827d64 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -1422,7 +1422,6 @@ dnl AC_DEFUN([EGG_IPV6_COMPAT], [ if test "$enable_ipv6" = "yes"; then - AC_CHECK_FUNCS([gethostbyname2]) AC_CHECK_TYPES([struct in6_addr], egg_cv_var_have_in6_addr="yes", egg_cv_var_have_in6_addr="no", [ #include #include diff --git a/src/Makefile.in b/src/Makefile.in index c9605a049..5ecc97d54 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -86,7 +86,7 @@ eggdrop.h: bg.o: bg.c main.h ../config.h ../eggint.h ../lush.h lang.h eggdrop.h \ compat/in6.h flags.h proto.h misc_file.h cmdt.h tclegg.h tclhash.h \ chan.h users.h compat/compat.h compat/base64.h compat/inet_aton.h \ - ../src/main.h compat/snprintf.h compat/gethostbyname2.h \ + ../src/main.h compat/snprintf.h \ compat/explicit_bzero.h compat/strlcpy.h bg.h botcmd.o: botcmd.c main.h ../config.h ../eggint.h ../lush.h lang.h \ eggdrop.h compat/in6.h flags.h proto.h misc_file.h cmdt.h tclegg.h \ diff --git a/src/compat/Makefile.in b/src/compat/Makefile.in index e2617fb5f..87012d46d 100644 --- a/src/compat/Makefile.in +++ b/src/compat/Makefile.in @@ -17,8 +17,7 @@ STRIP = @STRIP@ CFLAGS = @CFLAGS@ -I../.. -I$(top_srcdir) -I$(top_srcdir)/src @SSL_INCLUDES@ @DEFS@ $(CFLGS) CPPFLAGS = @CPPFLAGS@ -OBJS = base64.o explicit_bzero.o gethostbyname2.o in6.o inet_aton.o snprintf.o \ - strlcpy.o +OBJS = base64.o explicit_bzero.o in6.o inet_aton.o snprintf.o strlcpy.o doofus: @echo "" @@ -43,15 +42,6 @@ compat: $(OBJS) #safety hash base64.o: base64.c ../../config.h explicit_bzero.o: explicit_bzero.c ../../config.h -gethostbyname2.o: gethostbyname2.c gethostbyname2.h ../../src/main.h \ - ../../config.h ../../eggint.h ../../lush.h ../../src/lang.h \ - ../../src/eggdrop.h ../../src/compat/in6.h ../../src/flags.h \ - ../../src/proto.h ../../src/misc_file.h ../../src/cmdt.h \ - ../../src/tclegg.h ../../src/tclhash.h ../../src/chan.h \ - ../../src/users.h ../../src/compat/compat.h ../../src/compat/base64.h \ - ../../src/compat/inet_aton.h ../../src/compat/snprintf.h \ - ../../src/compat/gethostbyname2.h ../../src/compat/explicit_bzero.h \ - ../../src/compat/strlcpy.h in6.o: in6.c in6.h inet_aton.o: inet_aton.c ../../src/main.h ../../config.h ../../eggint.h \ ../../lush.h ../../src/lang.h ../../src/eggdrop.h ../../src/compat/in6.h \ @@ -59,7 +49,7 @@ inet_aton.o: inet_aton.c ../../src/main.h ../../config.h ../../eggint.h \ ../../src/cmdt.h ../../src/tclegg.h ../../src/tclhash.h ../../src/chan.h \ ../../src/users.h ../../src/compat/compat.h ../../src/compat/base64.h \ ../../src/compat/inet_aton.h ../../src/main.h \ - ../../src/compat/snprintf.h ../../src/compat/gethostbyname2.h \ + ../../src/compat/snprintf.h \ ../../src/compat/explicit_bzero.h ../../src/compat/strlcpy.h inet_aton.h snprintf.o: snprintf.c ../../src/main.h ../../config.h ../../eggint.h \ ../../lush.h ../../src/lang.h ../../src/eggdrop.h ../../src/compat/in6.h \ @@ -67,6 +57,6 @@ snprintf.o: snprintf.c ../../src/main.h ../../config.h ../../eggint.h \ ../../src/cmdt.h ../../src/tclegg.h ../../src/tclhash.h ../../src/chan.h \ ../../src/users.h ../../src/compat/compat.h ../../src/compat/base64.h \ ../../src/compat/inet_aton.h ../../src/main.h \ - ../../src/compat/snprintf.h ../../src/compat/gethostbyname2.h \ + ../../src/compat/snprintf.h \ ../../src/compat/explicit_bzero.h ../../src/compat/strlcpy.h snprintf.h strlcpy.o: strlcpy.c ../../config.h diff --git a/src/compat/compat.h b/src/compat/compat.h index 75eb1753c..63b35ebc4 100644 --- a/src/compat/compat.h +++ b/src/compat/compat.h @@ -26,7 +26,6 @@ #include "base64.h" #include "inet_aton.h" #include "snprintf.h" -#include "gethostbyname2.h" #include "explicit_bzero.h" #include "strlcpy.h" diff --git a/src/compat/gethostbyname2.c b/src/compat/gethostbyname2.c deleted file mode 100644 index 6f1ec80d9..000000000 --- a/src/compat/gethostbyname2.c +++ /dev/null @@ -1,39 +0,0 @@ -/* - * gethostbyname2.c -- provide a dummy gethostbyname2 replacement - */ -/* - * Copyright (C) 2010 - 2022 Eggheads Development Team - * - * 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 2 - * 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, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#include "gethostbyname2.h" - -#if defined IPV6 && !defined HAVE_GETHOSTBYNAME2 -struct hostent *gethostbyname2(const char *name, int af) -{ - struct hostent *h; - - h = gethostbyname(name); - if (!h) - return NULL; - if (h->h_addrtype != af) { - h_errno = NO_RECOVERY; - return NULL; - } - - return h; -} -#endif diff --git a/src/compat/gethostbyname2.h b/src/compat/gethostbyname2.h deleted file mode 100644 index 0f59f6e0e..000000000 --- a/src/compat/gethostbyname2.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * gethostbyname2.h - * prototypes for gethostbyname2.c - */ -/* - * Copyright (C) 2010 - 2022 Eggheads Development Team - * - * 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 2 - * 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, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifndef _EGG_COMPAT_GETHOSTBYNAME2 -#define _EGG_COMPAT_GETHOSTBYNAME2 - -#include "src/main.h" - -#include -#ifdef HAVE_SYS_SOCKET_H -# include -#endif -#include - -#if defined IPV6 && !defined HAVE_GETHOSTBYNAME2 -struct hostent *gethostbyname2(const char *name, int af); -#endif -#endif /* _EGG_COMPAT_GETHOSTBYNAME2 */ diff --git a/src/md5/Makefile.in b/src/md5/Makefile.in index 4c9c670d3..7bf42c5c9 100644 --- a/src/md5/Makefile.in +++ b/src/md5/Makefile.in @@ -46,5 +46,5 @@ md5c.o: md5c.c md5.h ../../src/main.h ../../config.h ../../eggint.h \ ../../src/cmdt.h ../../src/tclegg.h ../../src/tclhash.h ../../src/chan.h \ ../../src/users.h ../../src/compat/compat.h ../../src/compat/base64.h \ ../../src/compat/inet_aton.h ../../src/compat/snprintf.h \ - ../../src/compat/gethostbyname2.h ../../src/compat/explicit_bzero.h \ + ../../src/compat/explicit_bzero.h \ ../../src/compat/strlcpy.h diff --git a/src/net.c b/src/net.c index 30e1f4cb8..bb71aad6d 100644 --- a/src/net.c +++ b/src/net.c @@ -133,12 +133,14 @@ int setsockname(sockname_t *addr, char *src, int port, int allowres) char *endptr, *src2 = src;; long val; IP ip; - struct hostent *hp; volatile int af = AF_UNSPEC; char ip2[EGG_INET_ADDRSTRLEN]; #ifdef IPV6 volatile int pref; + struct addrinfo *res0 = NULL, *res; + int error; #else + struct hostent *hp; int i, count; #endif @@ -176,18 +178,28 @@ int setsockname(sockname_t *addr, char *src, int port, int allowres) /* src is a hostname. Attempt to resolve it.. */ if (!sigsetjmp(alarmret, 1)) { alarm(resolve_timeout); - hp = gethostbyname2(src, pref_af ? AF_INET6 : AF_INET); - if (!hp) - hp = gethostbyname2(src, pref_af ? AF_INET : AF_INET6); - alarm(0); - } else - hp = NULL; - if (hp) { - if (hp->h_addrtype == AF_INET) - memcpy(&addr->addr.s4.sin_addr, hp->h_addr_list[0], hp->h_length); + error = getaddrinfo(src, NULL, NULL, &res0); + if (!error) { + for (res = res0; res; res = res->ai_next) { + if (res == res0 || res->ai_family == (pref_af ? AF_INET6 : AF_INET)) { + af = res->ai_family; + memcpy(&addr->addr.sa, res->ai_addr, res->ai_addrlen); + if (res->ai_family == (pref_af ? AF_INET6 : AF_INET)) { + break; + } + } + } + if (res0) /* The behavior of freeadrinfo(NULL) is left unspecified by RFCs + * 2553 and 3493. Avoid to be compatible with all OSes. */ + freeaddrinfo(res0); + } + else if (error == EAI_NONAME) + debug1("net: setsockname(): getaddrinfo(): hostname %s not known", src); else - memcpy(&addr->addr.s6.sin6_addr, hp->h_addr_list[0], hp->h_length); - af = hp->h_addrtype; + debug1("net: setsockname(): getaddrinfo(): error = %s", gai_strerror(error)); + alarm(0); + } else { + debug1("net: setsockname(): getaddrinfo(): hostname %s resolve timeout", src); } } diff --git a/src/tcldcc.c b/src/tcldcc.c index 3fd96e0f0..3aba03757 100644 --- a/src/tcldcc.c +++ b/src/tcldcc.c @@ -22,6 +22,7 @@ */ #include "main.h" +#include #include "tandem.h" #include "modules.h" #include From 42916cee15222d20692569c161bc6ac3dec8ee19 Mon Sep 17 00:00:00 2001 From: Geo Date: Mon, 13 Feb 2023 19:22:17 -0500 Subject: [PATCH 163/201] Run autotools/makedepend --- config.h.in | 3 - configure | 24 +------- src/Makefile.in | 97 +++++++++++++++----------------- src/compat/Makefile.in | 8 +-- src/md5/Makefile.in | 3 +- src/mod/assoc.mod/Makefile | 1 - src/mod/blowfish.mod/Makefile | 1 - src/mod/channels.mod/Makefile | 1 - src/mod/compress.mod/Makefile.in | 1 - src/mod/compress.mod/configure | 2 +- src/mod/console.mod/Makefile | 1 - src/mod/ctcp.mod/Makefile | 7 +-- src/mod/dns.mod/Makefile.in | 4 +- src/mod/dns.mod/configure | 2 +- src/mod/filesys.mod/Makefile | 1 - src/mod/ident.mod/Makefile | 1 - src/mod/irc.mod/Makefile | 1 - src/mod/notes.mod/Makefile | 1 - src/mod/pbkdf2.mod/Makefile | 10 +++- src/mod/seen.mod/Makefile | 1 - src/mod/server.mod/Makefile | 1 - src/mod/share.mod/Makefile | 1 - src/mod/transfer.mod/Makefile | 1 - src/mod/twitch.mod/Makefile | 1 - src/mod/uptime.mod/Makefile | 7 +-- src/mod/woobie.mod/Makefile | 6 +- 26 files changed, 73 insertions(+), 114 deletions(-) diff --git a/config.h.in b/config.h.in index 4e56afd4a..1a412d315 100644 --- a/config.h.in +++ b/config.h.in @@ -111,9 +111,6 @@ /* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H -/* Define to 1 if you have the `gethostbyname2' function. */ -#undef HAVE_GETHOSTBYNAME2 - /* Define to 1 if you have the `getpagesize' function. */ #undef HAVE_GETPAGESIZE diff --git a/configure b/configure index 7372012d6..494e63381 100755 --- a/configure +++ b/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.ac 533f882a. +# From configure.ac de8c50be. # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for Eggdrop 1.9.4. # @@ -8933,14 +8933,14 @@ $as_echo "$TCL_INCLUDE_SPEC" >&6; } - if test "x$TCL_MAJOR_VERSION" = x || test "x$TCL_MINOR_VERSION" = x || test $TCL_MAJOR_VERSION -lt 8 || test $TCL_MAJOR_VERSION -eq 8 -a $TCL_MINOR_VERSION -lt 3; then + if test "x$TCL_MAJOR_VERSION" = x || test "x$TCL_MINOR_VERSION" = x || test $TCL_MAJOR_VERSION -lt 8 || test $TCL_MAJOR_VERSION -eq 8 -a $TCL_MINOR_VERSION -lt 5; then cat << EOF >&2 configure: error: Your Tcl version is much too old for Eggdrop to use. You should download and compile a more recent version. The most reliable current version is $tclrecommendver and can be downloaded from - ${tclrecommendsite}. We require at least Tcl 8.3. + ${tclrecommendsite}. We require at least Tcl 8.5. See doc/COMPILE-GUIDE's 'Tcl Detection and Installation' section for more information. @@ -8951,13 +8951,6 @@ EOF - if test $TCL_MAJOR_VERSION -gt 8 || test $TCL_MAJOR_VERSION -eq 8 -a $TCL_MINOR_VERSION -ge 4; then - -$as_echo "#define HAVE_TCL_NOTIFIER_INIT 1" >>confdefs.h - - fi - - if test "x$TCLINCFN" != x; then egg_tclinc="\\\"$TCLINC/$TCLINCFN\\\"" else @@ -9335,17 +9328,6 @@ $as_echo "#define IPV6 1" >>confdefs.h if test "$enable_ipv6" = "yes"; then - for ac_func in gethostbyname2 -do : - ac_fn_c_check_func "$LINENO" "gethostbyname2" "ac_cv_func_gethostbyname2" -if test "x$ac_cv_func_gethostbyname2" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_GETHOSTBYNAME2 1 -_ACEOF - -fi -done - ac_fn_c_check_type "$LINENO" "struct in6_addr" "ac_cv_type_struct_in6_addr" " #include #include diff --git a/src/Makefile.in b/src/Makefile.in index 5ecc97d54..6fbce846f 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -86,155 +86,146 @@ eggdrop.h: bg.o: bg.c main.h ../config.h ../eggint.h ../lush.h lang.h eggdrop.h \ compat/in6.h flags.h proto.h misc_file.h cmdt.h tclegg.h tclhash.h \ chan.h users.h compat/compat.h compat/base64.h compat/inet_aton.h \ - ../src/main.h compat/snprintf.h \ - compat/explicit_bzero.h compat/strlcpy.h bg.h + ../src/main.h compat/snprintf.h compat/explicit_bzero.h compat/strlcpy.h \ + bg.h botcmd.o: botcmd.c main.h ../config.h ../eggint.h ../lush.h lang.h \ eggdrop.h compat/in6.h flags.h proto.h misc_file.h cmdt.h tclegg.h \ tclhash.h chan.h users.h compat/compat.h compat/base64.h \ compat/inet_aton.h ../src/main.h compat/snprintf.h \ - compat/gethostbyname2.h compat/explicit_bzero.h compat/strlcpy.h \ - tandem.h modules.h mod/modvals.h + compat/explicit_bzero.h compat/strlcpy.h tandem.h modules.h \ + mod/modvals.h botmsg.o: botmsg.c main.h ../config.h ../eggint.h ../lush.h lang.h \ eggdrop.h compat/in6.h flags.h proto.h misc_file.h cmdt.h tclegg.h \ tclhash.h chan.h users.h compat/compat.h compat/base64.h \ compat/inet_aton.h ../src/main.h compat/snprintf.h \ - compat/gethostbyname2.h compat/explicit_bzero.h compat/strlcpy.h \ - tandem.h + compat/explicit_bzero.h compat/strlcpy.h tandem.h botnet.o: botnet.c main.h ../config.h ../eggint.h ../lush.h lang.h \ eggdrop.h compat/in6.h flags.h proto.h misc_file.h cmdt.h tclegg.h \ tclhash.h chan.h users.h compat/compat.h compat/base64.h \ compat/inet_aton.h ../src/main.h compat/snprintf.h \ - compat/gethostbyname2.h compat/explicit_bzero.h compat/strlcpy.h \ - tandem.h + compat/explicit_bzero.h compat/strlcpy.h tandem.h chanprog.o: chanprog.c main.h ../config.h ../eggint.h ../lush.h lang.h \ eggdrop.h compat/in6.h flags.h proto.h misc_file.h cmdt.h tclegg.h \ tclhash.h chan.h users.h compat/compat.h compat/base64.h \ compat/inet_aton.h ../src/main.h compat/snprintf.h \ - compat/gethostbyname2.h compat/explicit_bzero.h compat/strlcpy.h \ - modules.h mod/modvals.h + compat/explicit_bzero.h compat/strlcpy.h modules.h mod/modvals.h cmds.o: cmds.c main.h ../config.h ../eggint.h ../lush.h lang.h eggdrop.h \ compat/in6.h flags.h proto.h misc_file.h cmdt.h tclegg.h tclhash.h \ chan.h users.h compat/compat.h compat/base64.h compat/inet_aton.h \ - ../src/main.h compat/snprintf.h compat/gethostbyname2.h \ - compat/explicit_bzero.h compat/strlcpy.h tandem.h modules.h \ - mod/modvals.h + ../src/main.h compat/snprintf.h compat/explicit_bzero.h compat/strlcpy.h \ + tandem.h modules.h mod/modvals.h dcc.o: dcc.c main.h ../config.h ../eggint.h ../lush.h lang.h eggdrop.h \ compat/in6.h flags.h proto.h misc_file.h cmdt.h tclegg.h tclhash.h \ chan.h users.h compat/compat.h compat/base64.h compat/inet_aton.h \ - ../src/main.h compat/snprintf.h compat/gethostbyname2.h \ - compat/explicit_bzero.h compat/strlcpy.h modules.h mod/modvals.h \ - tandem.h md5/md5.h + ../src/main.h compat/snprintf.h compat/explicit_bzero.h compat/strlcpy.h \ + modules.h mod/modvals.h tandem.h md5/md5.h dccutil.o: dccutil.c main.h ../config.h ../eggint.h ../lush.h lang.h \ eggdrop.h compat/in6.h flags.h proto.h misc_file.h cmdt.h tclegg.h \ tclhash.h chan.h users.h compat/compat.h compat/base64.h \ compat/inet_aton.h ../src/main.h compat/snprintf.h \ - compat/gethostbyname2.h compat/explicit_bzero.h compat/strlcpy.h \ - modules.h mod/modvals.h tandem.h + compat/explicit_bzero.h compat/strlcpy.h modules.h mod/modvals.h \ + tandem.h dns.o: dns.c main.h ../config.h ../eggint.h ../lush.h lang.h eggdrop.h \ compat/in6.h flags.h proto.h misc_file.h cmdt.h tclegg.h tclhash.h \ chan.h users.h compat/compat.h compat/base64.h compat/inet_aton.h \ - ../src/main.h compat/snprintf.h compat/gethostbyname2.h \ - compat/explicit_bzero.h compat/strlcpy.h dns.h + ../src/main.h compat/snprintf.h compat/explicit_bzero.h compat/strlcpy.h \ + dns.h flags.o: flags.c main.h ../config.h ../eggint.h ../lush.h lang.h \ eggdrop.h compat/in6.h flags.h proto.h misc_file.h cmdt.h tclegg.h \ tclhash.h chan.h users.h compat/compat.h compat/base64.h \ compat/inet_aton.h ../src/main.h compat/snprintf.h \ - compat/gethostbyname2.h compat/explicit_bzero.h compat/strlcpy.h + compat/explicit_bzero.h compat/strlcpy.h language.o: language.c main.h ../config.h ../eggint.h ../lush.h lang.h \ eggdrop.h compat/in6.h flags.h proto.h misc_file.h cmdt.h tclegg.h \ tclhash.h chan.h users.h compat/compat.h compat/base64.h \ compat/inet_aton.h ../src/main.h compat/snprintf.h \ - compat/gethostbyname2.h compat/explicit_bzero.h compat/strlcpy.h + compat/explicit_bzero.h compat/strlcpy.h main.o: main.c ../config.h main.h ../eggint.h ../lush.h lang.h eggdrop.h \ compat/in6.h flags.h proto.h misc_file.h cmdt.h tclegg.h tclhash.h \ chan.h users.h compat/compat.h compat/base64.h compat/inet_aton.h \ - ../src/main.h compat/snprintf.h compat/gethostbyname2.h \ - compat/explicit_bzero.h compat/strlcpy.h version.h modules.h \ - mod/modvals.h tandem.h bg.h + ../src/main.h compat/snprintf.h compat/explicit_bzero.h compat/strlcpy.h \ + version.h modules.h mod/modvals.h tandem.h bg.h match.o: match.c main.h ../config.h ../eggint.h ../lush.h lang.h \ eggdrop.h compat/in6.h flags.h proto.h misc_file.h cmdt.h tclegg.h \ tclhash.h chan.h users.h compat/compat.h compat/base64.h \ compat/inet_aton.h ../src/main.h compat/snprintf.h \ - compat/gethostbyname2.h compat/explicit_bzero.h compat/strlcpy.h + compat/explicit_bzero.h compat/strlcpy.h mem.o: mem.c main.h ../config.h ../eggint.h ../lush.h lang.h eggdrop.h \ compat/in6.h flags.h proto.h misc_file.h cmdt.h tclegg.h tclhash.h \ chan.h users.h compat/compat.h compat/base64.h compat/inet_aton.h \ - ../src/main.h compat/snprintf.h compat/gethostbyname2.h \ - compat/explicit_bzero.h compat/strlcpy.h mod/modvals.h + ../src/main.h compat/snprintf.h compat/explicit_bzero.h compat/strlcpy.h \ + mod/modvals.h misc.o: misc.c main.h ../config.h ../eggint.h ../lush.h lang.h eggdrop.h \ compat/in6.h flags.h proto.h misc_file.h cmdt.h tclegg.h tclhash.h \ chan.h users.h compat/compat.h compat/base64.h compat/inet_aton.h \ - ../src/main.h compat/snprintf.h compat/gethostbyname2.h \ - compat/explicit_bzero.h compat/strlcpy.h tandem.h modules.h \ - mod/modvals.h stat.h + ../src/main.h compat/snprintf.h compat/explicit_bzero.h compat/strlcpy.h \ + tandem.h modules.h mod/modvals.h stat.h misc_file.o: misc_file.c main.h ../config.h ../eggint.h ../lush.h lang.h \ eggdrop.h compat/in6.h flags.h proto.h misc_file.h cmdt.h tclegg.h \ tclhash.h chan.h users.h compat/compat.h compat/base64.h \ compat/inet_aton.h ../src/main.h compat/snprintf.h \ - compat/gethostbyname2.h compat/explicit_bzero.h compat/strlcpy.h stat.h + compat/explicit_bzero.h compat/strlcpy.h stat.h modules.o: modules.c main.h ../config.h ../eggint.h ../lush.h lang.h \ eggdrop.h compat/in6.h flags.h proto.h misc_file.h cmdt.h tclegg.h \ tclhash.h chan.h users.h compat/compat.h compat/base64.h \ compat/inet_aton.h ../src/main.h compat/snprintf.h \ - compat/gethostbyname2.h compat/explicit_bzero.h compat/strlcpy.h \ - modules.h mod/modvals.h tandem.h md5/md5.h + compat/explicit_bzero.h compat/strlcpy.h modules.h mod/modvals.h \ + tandem.h md5/md5.h net.o: net.c main.h ../config.h ../eggint.h ../lush.h lang.h eggdrop.h \ compat/in6.h flags.h proto.h misc_file.h cmdt.h tclegg.h tclhash.h \ chan.h users.h compat/compat.h compat/base64.h compat/inet_aton.h \ - ../src/main.h compat/snprintf.h compat/gethostbyname2.h \ - compat/explicit_bzero.h compat/strlcpy.h mod/server.mod/server.h + ../src/main.h compat/snprintf.h compat/explicit_bzero.h compat/strlcpy.h \ + mod/server.mod/server.h rfc1459.o: rfc1459.c main.h ../config.h ../eggint.h ../lush.h lang.h \ eggdrop.h compat/in6.h flags.h proto.h misc_file.h cmdt.h tclegg.h \ tclhash.h chan.h users.h compat/compat.h compat/base64.h \ compat/inet_aton.h ../src/main.h compat/snprintf.h \ - compat/gethostbyname2.h compat/explicit_bzero.h compat/strlcpy.h + compat/explicit_bzero.h compat/strlcpy.h tcl.o: tcl.c main.h ../config.h ../eggint.h ../lush.h lang.h eggdrop.h \ compat/in6.h flags.h proto.h misc_file.h cmdt.h tclegg.h tclhash.h \ chan.h users.h compat/compat.h compat/base64.h compat/inet_aton.h \ - ../src/main.h compat/snprintf.h compat/gethostbyname2.h \ - compat/explicit_bzero.h compat/strlcpy.h + ../src/main.h compat/snprintf.h compat/explicit_bzero.h compat/strlcpy.h tcldcc.o: tcldcc.c main.h ../config.h ../eggint.h ../lush.h lang.h \ eggdrop.h compat/in6.h flags.h proto.h misc_file.h cmdt.h tclegg.h \ tclhash.h chan.h users.h compat/compat.h compat/base64.h \ compat/inet_aton.h ../src/main.h compat/snprintf.h \ - compat/gethostbyname2.h compat/explicit_bzero.h compat/strlcpy.h \ - tandem.h modules.h mod/modvals.h + compat/explicit_bzero.h compat/strlcpy.h tandem.h modules.h \ + mod/modvals.h tclhash.o: tclhash.c main.h ../config.h ../eggint.h ../lush.h lang.h \ eggdrop.h compat/in6.h flags.h proto.h misc_file.h cmdt.h tclegg.h \ tclhash.h chan.h users.h compat/compat.h compat/base64.h \ compat/inet_aton.h ../src/main.h compat/snprintf.h \ - compat/gethostbyname2.h compat/explicit_bzero.h compat/strlcpy.h + compat/explicit_bzero.h compat/strlcpy.h tclmisc.o: tclmisc.c main.h ../config.h ../eggint.h ../lush.h lang.h \ eggdrop.h compat/in6.h flags.h proto.h misc_file.h cmdt.h tclegg.h \ tclhash.h chan.h users.h compat/compat.h compat/base64.h \ compat/inet_aton.h ../src/main.h compat/snprintf.h \ - compat/gethostbyname2.h compat/explicit_bzero.h compat/strlcpy.h \ - modules.h mod/modvals.h tandem.h md5/md5.h + compat/explicit_bzero.h compat/strlcpy.h modules.h mod/modvals.h \ + tandem.h md5/md5.h tcluser.o: tcluser.c main.h ../config.h ../eggint.h ../lush.h lang.h \ eggdrop.h compat/in6.h flags.h proto.h misc_file.h cmdt.h tclegg.h \ tclhash.h chan.h users.h compat/compat.h compat/base64.h \ compat/inet_aton.h ../src/main.h compat/snprintf.h \ - compat/gethostbyname2.h compat/explicit_bzero.h compat/strlcpy.h \ - tandem.h modules.h mod/modvals.h + compat/explicit_bzero.h compat/strlcpy.h tandem.h modules.h \ + mod/modvals.h tls.o: tls.c main.h ../config.h ../eggint.h ../lush.h lang.h eggdrop.h \ compat/in6.h flags.h proto.h misc_file.h cmdt.h tclegg.h tclhash.h \ chan.h users.h compat/compat.h compat/base64.h compat/inet_aton.h \ - ../src/main.h compat/snprintf.h compat/gethostbyname2.h \ - compat/explicit_bzero.h compat/strlcpy.h + ../src/main.h compat/snprintf.h compat/explicit_bzero.h compat/strlcpy.h userent.o: userent.c main.h ../config.h ../eggint.h ../lush.h lang.h \ eggdrop.h compat/in6.h flags.h proto.h misc_file.h cmdt.h tclegg.h \ tclhash.h chan.h users.h compat/compat.h compat/base64.h \ compat/inet_aton.h ../src/main.h compat/snprintf.h \ - compat/gethostbyname2.h compat/explicit_bzero.h compat/strlcpy.h + compat/explicit_bzero.h compat/strlcpy.h userrec.o: userrec.c main.h ../config.h ../eggint.h ../lush.h lang.h \ eggdrop.h compat/in6.h flags.h proto.h misc_file.h cmdt.h tclegg.h \ tclhash.h chan.h users.h compat/compat.h compat/base64.h \ compat/inet_aton.h ../src/main.h compat/snprintf.h \ - compat/gethostbyname2.h compat/explicit_bzero.h compat/strlcpy.h \ - modules.h mod/modvals.h tandem.h + compat/explicit_bzero.h compat/strlcpy.h modules.h mod/modvals.h \ + tandem.h users.o: users.c main.h ../config.h ../eggint.h ../lush.h lang.h \ eggdrop.h compat/in6.h flags.h proto.h misc_file.h cmdt.h tclegg.h \ tclhash.h chan.h users.h compat/compat.h compat/base64.h \ compat/inet_aton.h ../src/main.h compat/snprintf.h \ - compat/gethostbyname2.h compat/explicit_bzero.h compat/strlcpy.h \ - modules.h mod/modvals.h tandem.h + compat/explicit_bzero.h compat/strlcpy.h modules.h mod/modvals.h \ + tandem.h diff --git a/src/compat/Makefile.in b/src/compat/Makefile.in index 87012d46d..c431ee491 100644 --- a/src/compat/Makefile.in +++ b/src/compat/Makefile.in @@ -49,14 +49,14 @@ inet_aton.o: inet_aton.c ../../src/main.h ../../config.h ../../eggint.h \ ../../src/cmdt.h ../../src/tclegg.h ../../src/tclhash.h ../../src/chan.h \ ../../src/users.h ../../src/compat/compat.h ../../src/compat/base64.h \ ../../src/compat/inet_aton.h ../../src/main.h \ - ../../src/compat/snprintf.h \ - ../../src/compat/explicit_bzero.h ../../src/compat/strlcpy.h inet_aton.h + ../../src/compat/snprintf.h ../../src/compat/explicit_bzero.h \ + ../../src/compat/strlcpy.h inet_aton.h snprintf.o: snprintf.c ../../src/main.h ../../config.h ../../eggint.h \ ../../lush.h ../../src/lang.h ../../src/eggdrop.h ../../src/compat/in6.h \ ../../src/flags.h ../../src/proto.h ../../src/misc_file.h \ ../../src/cmdt.h ../../src/tclegg.h ../../src/tclhash.h ../../src/chan.h \ ../../src/users.h ../../src/compat/compat.h ../../src/compat/base64.h \ ../../src/compat/inet_aton.h ../../src/main.h \ - ../../src/compat/snprintf.h \ - ../../src/compat/explicit_bzero.h ../../src/compat/strlcpy.h snprintf.h + ../../src/compat/snprintf.h ../../src/compat/explicit_bzero.h \ + ../../src/compat/strlcpy.h snprintf.h strlcpy.o: strlcpy.c ../../config.h diff --git a/src/md5/Makefile.in b/src/md5/Makefile.in index 7bf42c5c9..81fb52a98 100644 --- a/src/md5/Makefile.in +++ b/src/md5/Makefile.in @@ -46,5 +46,4 @@ md5c.o: md5c.c md5.h ../../src/main.h ../../config.h ../../eggint.h \ ../../src/cmdt.h ../../src/tclegg.h ../../src/tclhash.h ../../src/chan.h \ ../../src/users.h ../../src/compat/compat.h ../../src/compat/base64.h \ ../../src/compat/inet_aton.h ../../src/compat/snprintf.h \ - ../../src/compat/explicit_bzero.h \ - ../../src/compat/strlcpy.h + ../../src/compat/explicit_bzero.h ../../src/compat/strlcpy.h diff --git a/src/mod/assoc.mod/Makefile b/src/mod/assoc.mod/Makefile index 756870353..5bc160183 100644 --- a/src/mod/assoc.mod/Makefile +++ b/src/mod/assoc.mod/Makefile @@ -35,6 +35,5 @@ distclean: clean ../../../src/tclhash.h ../../../src/chan.h ../../../src/users.h \ ../../../src/compat/compat.h ../../../src/compat/base64.h \ ../../../src/compat/inet_aton.h ../../../src/compat/snprintf.h \ - ../../../src/compat/gethostbyname2.h \ ../../../src/compat/explicit_bzero.h ../../../src/compat/strlcpy.h \ ../../../src/mod/modvals.h ../../../src/tandem.h .././assoc.mod/assoc.h diff --git a/src/mod/blowfish.mod/Makefile b/src/mod/blowfish.mod/Makefile index 4a448b5b1..64b1e7344 100644 --- a/src/mod/blowfish.mod/Makefile +++ b/src/mod/blowfish.mod/Makefile @@ -35,7 +35,6 @@ distclean: clean ../../../src/tclhash.h ../../../src/chan.h ../../../src/users.h \ ../../../src/compat/compat.h ../../../src/compat/base64.h \ ../../../src/compat/inet_aton.h ../../../src/compat/snprintf.h \ - ../../../src/compat/gethostbyname2.h \ ../../../src/compat/explicit_bzero.h ../../../src/compat/strlcpy.h \ ../../../src/mod/modvals.h ../../../src/tandem.h \ .././blowfish.mod/blowfish.h .././blowfish.mod/bf_tab.h diff --git a/src/mod/channels.mod/Makefile b/src/mod/channels.mod/Makefile index 2e75492be..b53d568cd 100644 --- a/src/mod/channels.mod/Makefile +++ b/src/mod/channels.mod/Makefile @@ -35,7 +35,6 @@ distclean: clean ../../../src/tclhash.h ../../../src/chan.h ../../../src/users.h \ ../../../src/compat/compat.h ../../../src/compat/base64.h \ ../../../src/compat/inet_aton.h ../../../src/compat/snprintf.h \ - ../../../src/compat/gethostbyname2.h \ ../../../src/compat/explicit_bzero.h ../../../src/compat/strlcpy.h \ ../../../src/mod/modvals.h ../../../src/tandem.h \ .././channels.mod/channels.h .././channels.mod/cmdschan.c \ diff --git a/src/mod/compress.mod/Makefile.in b/src/mod/compress.mod/Makefile.in index 552f38f15..6f91a3342 100644 --- a/src/mod/compress.mod/Makefile.in +++ b/src/mod/compress.mod/Makefile.in @@ -39,7 +39,6 @@ distclean: clean ../../../src/tclhash.h ../../../src/chan.h ../../../src/users.h \ ../../../src/compat/compat.h ../../../src/compat/base64.h \ ../../../src/compat/inet_aton.h ../../../src/compat/snprintf.h \ - ../../../src/compat/gethostbyname2.h \ ../../../src/compat/explicit_bzero.h ../../../src/compat/strlcpy.h \ ../../../src/mod/modvals.h ../../../src/tandem.h \ ../../../src/mod/share.mod/share.h .././compress.mod/compress.h \ diff --git a/src/mod/compress.mod/configure b/src/mod/compress.mod/configure index 3ea939674..88d9e0815 100755 --- a/src/mod/compress.mod/configure +++ b/src/mod/compress.mod/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.ac 533f882a. +# From configure.ac de8c50be. # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for Eggdrop Compress Module 1.9.4. # diff --git a/src/mod/console.mod/Makefile b/src/mod/console.mod/Makefile index e33c0b8e3..a678d1176 100644 --- a/src/mod/console.mod/Makefile +++ b/src/mod/console.mod/Makefile @@ -35,7 +35,6 @@ distclean: clean ../../../src/tclhash.h ../../../src/chan.h ../../../src/users.h \ ../../../src/compat/compat.h ../../../src/compat/base64.h \ ../../../src/compat/inet_aton.h ../../../src/compat/snprintf.h \ - ../../../src/compat/gethostbyname2.h \ ../../../src/compat/explicit_bzero.h ../../../src/compat/strlcpy.h \ ../../../src/mod/modvals.h ../../../src/tandem.h \ .././console.mod/console.h diff --git a/src/mod/ctcp.mod/Makefile b/src/mod/ctcp.mod/Makefile index 8412533f0..dec8c9d97 100644 --- a/src/mod/ctcp.mod/Makefile +++ b/src/mod/ctcp.mod/Makefile @@ -35,7 +35,6 @@ distclean: clean ../../../src/cmdt.h ../../../src/tclegg.h ../../../src/tclhash.h \ ../../../src/chan.h ../../../src/users.h ../../../src/compat/compat.h \ ../../../src/compat/base64.h ../../../src/compat/inet_aton.h \ - ../../../src/compat/snprintf.h ../../../src/compat/gethostbyname2.h \ - ../../../src/compat/explicit_bzero.h ../../../src/compat/strlcpy.h \ - ../../../src/mod/modvals.h ../../../src/tandem.h \ - ../../../src/mod/server.mod/server.h + ../../../src/compat/snprintf.h ../../../src/compat/explicit_bzero.h \ + ../../../src/compat/strlcpy.h ../../../src/mod/modvals.h \ + ../../../src/tandem.h ../../../src/mod/server.mod/server.h diff --git a/src/mod/dns.mod/Makefile.in b/src/mod/dns.mod/Makefile.in index bba72091b..b2508d6a9 100644 --- a/src/mod/dns.mod/Makefile.in +++ b/src/mod/dns.mod/Makefile.in @@ -40,7 +40,5 @@ distclean: clean ../../../src/tclhash.h ../../../src/chan.h ../../../src/users.h \ ../../../src/compat/compat.h ../../../src/compat/base64.h \ ../../../src/compat/inet_aton.h ../../../src/compat/snprintf.h \ - ../../../src/compat/gethostbyname2.h \ ../../../src/compat/explicit_bzero.h ../../../src/compat/strlcpy.h \ - ../../../src/mod/modvals.h ../../../src/tandem.h .././dns.mod/dns.h \ - .././dns.mod/coredns.c + ../../../src/mod/modvals.h ../../../src/tandem.h diff --git a/src/mod/dns.mod/configure b/src/mod/dns.mod/configure index 84e203692..5f03ba0b7 100755 --- a/src/mod/dns.mod/configure +++ b/src/mod/dns.mod/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.ac 533f882a. +# From configure.ac de8c50be. # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for Eggdrop DNS Module 1.9.4. # diff --git a/src/mod/filesys.mod/Makefile b/src/mod/filesys.mod/Makefile index c5bb3ac99..f1a7e1309 100644 --- a/src/mod/filesys.mod/Makefile +++ b/src/mod/filesys.mod/Makefile @@ -35,7 +35,6 @@ distclean: clean ../../../src/tclhash.h ../../../src/chan.h ../../../src/users.h \ ../../../src/compat/compat.h ../../../src/compat/base64.h \ ../../../src/compat/inet_aton.h ../../../src/compat/snprintf.h \ - ../../../src/compat/gethostbyname2.h \ ../../../src/compat/explicit_bzero.h ../../../src/compat/strlcpy.h \ ../../../src/mod/modvals.h ../../../src/tandem.h \ .././filesys.mod/filedb3.h .././filesys.mod/filesys.h \ diff --git a/src/mod/ident.mod/Makefile b/src/mod/ident.mod/Makefile index eb261e1cd..071e7ef01 100644 --- a/src/mod/ident.mod/Makefile +++ b/src/mod/ident.mod/Makefile @@ -35,7 +35,6 @@ distclean: clean ../../../src/tclhash.h ../../../src/chan.h ../../../src/users.h \ ../../../src/compat/compat.h ../../../src/compat/base64.h \ ../../../src/compat/inet_aton.h ../../../src/compat/snprintf.h \ - ../../../src/compat/gethostbyname2.h \ ../../../src/compat/explicit_bzero.h ../../../src/compat/strlcpy.h \ ../../../src/mod/modvals.h ../../../src/tandem.h \ ../../../src/mod/server.mod/server.h diff --git a/src/mod/irc.mod/Makefile b/src/mod/irc.mod/Makefile index 4fb07ab95..8a17bf80c 100644 --- a/src/mod/irc.mod/Makefile +++ b/src/mod/irc.mod/Makefile @@ -35,7 +35,6 @@ distclean: clean ../../../src/tclhash.h ../../../src/chan.h ../../../src/users.h \ ../../../src/compat/compat.h ../../../src/compat/base64.h \ ../../../src/compat/inet_aton.h ../../../src/compat/snprintf.h \ - ../../../src/compat/gethostbyname2.h \ ../../../src/compat/explicit_bzero.h ../../../src/compat/strlcpy.h \ ../../../src/mod/modvals.h ../../../src/tandem.h .././irc.mod/irc.h \ ../../../src/mod/server.mod/server.h \ diff --git a/src/mod/notes.mod/Makefile b/src/mod/notes.mod/Makefile index 7c001acfb..0c3ce51a5 100644 --- a/src/mod/notes.mod/Makefile +++ b/src/mod/notes.mod/Makefile @@ -35,7 +35,6 @@ distclean: clean ../../../src/tclhash.h ../../../src/chan.h ../../../src/users.h \ ../../../src/compat/compat.h ../../../src/compat/base64.h \ ../../../src/compat/inet_aton.h ../../../src/compat/snprintf.h \ - ../../../src/compat/gethostbyname2.h \ ../../../src/compat/explicit_bzero.h ../../../src/compat/strlcpy.h \ ../../../src/mod/modvals.h ../../../src/tandem.h .././notes.mod/notes.h \ .././notes.mod/cmdsnote.c diff --git a/src/mod/pbkdf2.mod/Makefile b/src/mod/pbkdf2.mod/Makefile index b28559065..8266ce14f 100644 --- a/src/mod/pbkdf2.mod/Makefile +++ b/src/mod/pbkdf2.mod/Makefile @@ -28,4 +28,12 @@ clean: distclean: clean #safety hash -../pbkdf2.o: .././pbkdf2.mod/pbkdf2.c +../pbkdf2.o: .././pbkdf2.mod/pbkdf2.c ../../../src/mod/module.h \ + ../../../src/main.h ../../../config.h ../../../eggint.h ../../../lush.h \ + ../../../src/lang.h ../../../src/eggdrop.h ../../../src/compat/in6.h \ + ../../../src/flags.h ../../../src/cmdt.h ../../../src/tclegg.h \ + ../../../src/tclhash.h ../../../src/chan.h ../../../src/users.h \ + ../../../src/compat/compat.h ../../../src/compat/base64.h \ + ../../../src/compat/inet_aton.h ../../../src/compat/snprintf.h \ + ../../../src/compat/explicit_bzero.h ../../../src/compat/strlcpy.h \ + ../../../src/mod/modvals.h ../../../src/tandem.h diff --git a/src/mod/seen.mod/Makefile b/src/mod/seen.mod/Makefile index c61d32b5c..bcf2454c0 100644 --- a/src/mod/seen.mod/Makefile +++ b/src/mod/seen.mod/Makefile @@ -35,7 +35,6 @@ distclean: clean ../../../src/tclhash.h ../../../src/chan.h ../../../src/users.h \ ../../../src/compat/compat.h ../../../src/compat/base64.h \ ../../../src/compat/inet_aton.h ../../../src/compat/snprintf.h \ - ../../../src/compat/gethostbyname2.h \ ../../../src/compat/explicit_bzero.h ../../../src/compat/strlcpy.h \ ../../../src/mod/modvals.h ../../../src/tandem.h ../../../src/users.h \ ../../../src/chan.h ../../../src/mod/channels.mod/channels.h diff --git a/src/mod/server.mod/Makefile b/src/mod/server.mod/Makefile index aaa8ee887..1b26a1043 100644 --- a/src/mod/server.mod/Makefile +++ b/src/mod/server.mod/Makefile @@ -35,7 +35,6 @@ distclean: clean ../../../src/tclhash.h ../../../src/chan.h ../../../src/users.h \ ../../../src/compat/compat.h ../../../src/compat/base64.h \ ../../../src/compat/inet_aton.h ../../../src/compat/snprintf.h \ - ../../../src/compat/gethostbyname2.h \ ../../../src/compat/explicit_bzero.h ../../../src/compat/strlcpy.h \ ../../../src/mod/modvals.h ../../../src/tandem.h \ .././server.mod/server.h .././server.mod/isupport.c \ diff --git a/src/mod/share.mod/Makefile b/src/mod/share.mod/Makefile index e6f804367..5543e3570 100644 --- a/src/mod/share.mod/Makefile +++ b/src/mod/share.mod/Makefile @@ -35,7 +35,6 @@ distclean: clean ../../../src/tclhash.h ../../../src/chan.h ../../../src/users.h \ ../../../src/compat/compat.h ../../../src/compat/base64.h \ ../../../src/compat/inet_aton.h ../../../src/compat/snprintf.h \ - ../../../src/compat/gethostbyname2.h \ ../../../src/compat/explicit_bzero.h ../../../src/compat/strlcpy.h \ ../../../src/mod/modvals.h ../../../src/tandem.h ../../../src/chan.h \ ../../../src/users.h ../../../src/mod/transfer.mod/transfer.h \ diff --git a/src/mod/transfer.mod/Makefile b/src/mod/transfer.mod/Makefile index 9cfb660bc..21de50e84 100644 --- a/src/mod/transfer.mod/Makefile +++ b/src/mod/transfer.mod/Makefile @@ -35,7 +35,6 @@ distclean: clean ../../../src/tclhash.h ../../../src/chan.h ../../../src/users.h \ ../../../src/compat/compat.h ../../../src/compat/base64.h \ ../../../src/compat/inet_aton.h ../../../src/compat/snprintf.h \ - ../../../src/compat/gethostbyname2.h \ ../../../src/compat/explicit_bzero.h ../../../src/compat/strlcpy.h \ ../../../src/mod/modvals.h ../../../src/tandem.h ../../../src/users.h \ .././transfer.mod/transfer.h .././transfer.mod/transferfstat.c \ diff --git a/src/mod/twitch.mod/Makefile b/src/mod/twitch.mod/Makefile index bb81afa35..3477b6281 100644 --- a/src/mod/twitch.mod/Makefile +++ b/src/mod/twitch.mod/Makefile @@ -35,7 +35,6 @@ distclean: clean ../../../src/tclhash.h ../../../src/chan.h ../../../src/users.h \ ../../../src/compat/compat.h ../../../src/compat/base64.h \ ../../../src/compat/inet_aton.h ../../../src/compat/snprintf.h \ - ../../../src/compat/gethostbyname2.h \ ../../../src/compat/explicit_bzero.h ../../../src/compat/strlcpy.h \ ../../../src/mod/modvals.h ../../../src/tandem.h \ ../../../src/mod/twitch.mod/twitch.h \ diff --git a/src/mod/uptime.mod/Makefile b/src/mod/uptime.mod/Makefile index ec120df9b..ff49761a4 100644 --- a/src/mod/uptime.mod/Makefile +++ b/src/mod/uptime.mod/Makefile @@ -34,7 +34,6 @@ distclean: clean ../../../src/cmdt.h ../../../src/tclegg.h ../../../src/tclhash.h \ ../../../src/chan.h ../../../src/users.h ../../../src/compat/compat.h \ ../../../src/compat/base64.h ../../../src/compat/inet_aton.h \ - ../../../src/compat/snprintf.h ../../../src/compat/gethostbyname2.h \ - ../../../src/compat/explicit_bzero.h ../../../src/compat/strlcpy.h \ - .././uptime.mod/../modvals.h ../../../src/tandem.h \ - .././uptime.mod/../server.mod/server.h + ../../../src/compat/snprintf.h ../../../src/compat/explicit_bzero.h \ + ../../../src/compat/strlcpy.h .././uptime.mod/../modvals.h \ + ../../../src/tandem.h .././uptime.mod/../server.mod/server.h diff --git a/src/mod/woobie.mod/Makefile b/src/mod/woobie.mod/Makefile index 8b1a3417e..9ce22150a 100644 --- a/src/mod/woobie.mod/Makefile +++ b/src/mod/woobie.mod/Makefile @@ -34,6 +34,6 @@ distclean: clean ../../../src/cmdt.h ../../../src/tclegg.h ../../../src/tclhash.h \ ../../../src/chan.h ../../../src/users.h ../../../src/compat/compat.h \ ../../../src/compat/base64.h ../../../src/compat/inet_aton.h \ - ../../../src/compat/snprintf.h ../../../src/compat/gethostbyname2.h \ - ../../../src/compat/explicit_bzero.h ../../../src/compat/strlcpy.h \ - ../../../src/mod/modvals.h ../../../src/tandem.h + ../../../src/compat/snprintf.h ../../../src/compat/explicit_bzero.h \ + ../../../src/compat/strlcpy.h ../../../src/mod/modvals.h \ + ../../../src/tandem.h From d9bda49c2d6f3b4e43252b8119999b271a931e9c Mon Sep 17 00:00:00 2001 From: Geo Date: Mon, 13 Feb 2023 19:23:15 -0500 Subject: [PATCH 164/201] bump patchlevel --- src/version.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/version.h b/src/version.h index 5111478ae..36f59b15c 100644 --- a/src/version.h +++ b/src/version.h @@ -27,5 +27,5 @@ */ #define EGG_STRINGVER "1.9.4" -#define EGG_NUMVER 1090404 -#define EGG_PATCH "logupdates" +#define EGG_NUMVER 1090405 +#define EGG_PATCH "raisetcl" From 506f1405af21fa68652e0dae909d48a119cb3054 Mon Sep 17 00:00:00 2001 From: Geo Date: Mon, 13 Feb 2023 21:14:40 -0500 Subject: [PATCH 165/201] Update THANKS --- THANKS | 2 ++ 1 file changed, 2 insertions(+) diff --git a/THANKS b/THANKS index 1f3f5ba6f..53fe4a189 100644 --- a/THANKS +++ b/THANKS @@ -236,6 +236,7 @@ eelcohuininga Eelco Huininga Ehrenberg ejm Emmanuel Marty +Empus Erick- Erick Velez erick@erick.org eryg-kai Evo|ver @@ -509,6 +510,7 @@ Robby robby@chatbelgie.be Roger Yerramsetti Rok Papez romulus +rsc Robert Scheck Rufus S Wilcox S7reaM From c27143997de77af5f66c6278f02f86de24bba15d Mon Sep 17 00:00:00 2001 From: Geo Date: Mon, 13 Feb 2023 21:15:52 -0500 Subject: [PATCH 166/201] Update NEWS --- NEWS | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/NEWS b/NEWS index 6af6b7bac..a884e737a 100644 --- a/NEWS +++ b/NEWS @@ -15,6 +15,35 @@ Last revised: December 4, 2021 _________________________________________________________________ +Eggdrop v1.9.5: + + General changes: + - Implemented a workaround for a Tcl issue parsing emojis that can cause a + crash + - Fixed an improper change to the display of bind flags that caused issues + with Tcl scripts that parse bind flags + - Added SSL header information to .status to help diagnose ./configure + mismatches + - Lots of under-the-hood bug fixes + + Botnet changes: + - None + + Tcl API changes: + - Tcl minimum required version is now 8.5! This actually happened in version + version 1.9.0; we just forgot to tell people. Oops! :) + + Module changes: + - Updated woobie.mod with additional example code + + Eggdrop config changes: + - None + + Documentation changes: + - Added additional documentation to help write modules + - Updated botnet docs to include reference to TLS docs for secure links + - Updated Tcl repo from unmaintained FTP to HTTP repository + Eggdrop v1.9.4: General changes: From ffb8c1814095966386f9891e43d10a67ed9ceec3 Mon Sep 17 00:00:00 2001 From: Geo Date: Mon, 13 Feb 2023 21:22:26 -0500 Subject: [PATCH 167/201] Update copyright --- AUTHORS | 2 +- CONTENTS | 2 +- FEATURES | 2 +- INSTALL | 6 +- NEWS | 4 +- aclocal.m4 | 2 +- config.h.in | 2 +- configure | 4 +- configure.ac | 4 +- doc/ABOUT | 2 +- doc/BANS | 2 +- doc/BOTNET | 27 +- doc/COMPILE-GUIDE | 2 +- doc/CONTENTS | 2 +- doc/FIRST-SCRIPT | 2 +- doc/IPV6 | 2 +- doc/IRCv3 | 2 +- doc/MODULES | 2 +- doc/PARTYLINE | 2 +- doc/PATCH-HOWTO | 2 +- doc/PBKDF2 | 2 +- doc/TLS | 2 +- doc/TRICKS | 2 +- doc/USERS | 2 +- doc/core.settings | 6 +- doc/html/_static/basic.css | 331 ++- doc/html/_static/doctools.js | 377 +-- doc/html/_static/documentation_options.js | 6 +- doc/html/_static/language_data.js | 106 +- doc/html/_static/pygments.css | 7 +- doc/html/_static/searchtools.js | 793 ++--- doc/html/_static/sphinx_highlight.js | 144 + doc/html/about/about.html | 72 +- doc/html/about/legal.html | 52 +- doc/html/index.html | 121 +- doc/html/install/install.html | 121 +- doc/html/install/readme.html | 201 +- doc/html/install/upgrading.html | 108 +- doc/html/modules/assoc.html | 2 +- doc/html/modules/blowfish.html | 2 +- doc/html/modules/channels.html | 2 +- doc/html/modules/compress.html | 2 +- doc/html/modules/console.html | 2 +- doc/html/modules/ctcp.html | 2 +- doc/html/modules/dns.html | 2 +- doc/html/modules/filesys.html | 2 +- doc/html/modules/ident.html | 2 +- doc/html/modules/included.html | 154 +- doc/html/modules/index.html | 106 +- doc/html/modules/internals.html | 166 +- doc/html/modules/irc.html | 2 +- doc/html/modules/mod/assoc.html | 54 +- doc/html/modules/mod/blowfish.html | 54 +- doc/html/modules/mod/channels.html | 467 ++- doc/html/modules/mod/compress.html | 68 +- doc/html/modules/mod/console.html | 74 +- doc/html/modules/mod/ctcp.html | 83 +- doc/html/modules/mod/dns.html | 86 +- doc/html/modules/mod/filesys.html | 325 ++- doc/html/modules/mod/ident.html | 91 +- doc/html/modules/mod/irc.html | 197 +- doc/html/modules/mod/notes.html | 88 +- doc/html/modules/mod/pbkdf2.html | 70 +- doc/html/modules/mod/seen.html | 54 +- doc/html/modules/mod/server.html | 278 +- doc/html/modules/mod/share.html | 92 +- doc/html/modules/mod/transfer.html | 86 +- doc/html/modules/mod/twitch.html | 93 +- doc/html/modules/mod/uptime.html | 60 +- doc/html/modules/mod/woobie.html | 54 +- doc/html/modules/notes.html | 2 +- doc/html/modules/pbkdf2.html | 2 +- doc/html/modules/seen.html | 2 +- doc/html/modules/server.html | 2 +- doc/html/modules/share.html | 2 +- doc/html/modules/transfer.html | 2 +- doc/html/modules/twitch.html | 2 +- doc/html/modules/uptime.html | 2 +- doc/html/modules/woobie.html | 2 +- doc/html/modules/writing.html | 136 +- doc/html/objects.inv | Bin 1319 -> 1395 bytes doc/html/search.html | 75 +- doc/html/searchindex.js | 2 +- doc/html/tutorials/firstscript.html | 96 +- doc/html/tutorials/firststeps.html | 150 +- doc/html/tutorials/module.html | 106 +- doc/html/tutorials/setup.html | 269 +- doc/html/tutorials/tlssetup.html | 96 +- doc/html/using/accounts.html | 112 +- doc/html/using/bans.html | 108 +- doc/html/using/botnet.html | 326 +-- doc/html/using/core.html | 693 +++-- doc/html/using/features.html | 98 +- doc/html/using/ipv6.html | 99 +- doc/html/using/ircv3.html | 104 +- doc/html/using/partyline.html | 56 +- doc/html/using/patch.html | 85 +- doc/html/using/pbkdf2.html | 2 +- doc/html/using/pbkdf2info.html | 130 +- doc/html/using/tcl-commands.html | 2858 +++++++++---------- doc/html/using/text-sub.html | 153 +- doc/html/using/tls.html | 177 +- doc/html/using/tricks.html | 90 +- doc/html/using/twitch-tcl-commands.html | 162 +- doc/html/using/twitchinfo.html | 110 +- doc/html/using/users.html | 228 +- doc/man1/eggdrop.1 | 4 +- doc/modules/mod.assoc | 2 +- doc/modules/mod.blowfish | 2 +- doc/modules/mod.channels | 2 +- doc/modules/mod.compress | 2 +- doc/modules/mod.console | 2 +- doc/modules/mod.ctcp | 2 +- doc/modules/mod.dns | 2 +- doc/modules/mod.filesys | 2 +- doc/modules/mod.ident | 2 +- doc/modules/mod.irc | 2 +- doc/modules/mod.notes | 2 +- doc/modules/mod.pbkdf2 | 2 +- doc/modules/mod.seen | 2 +- doc/modules/mod.server | 2 +- doc/modules/mod.share | 2 +- doc/modules/mod.transfer | 2 +- doc/modules/mod.twitch | 2 +- doc/modules/mod.uptime | 2 +- doc/modules/mod.woobie | 2 +- doc/modules/writing-modules | 2 +- doc/settings/CONTENTS | 2 +- doc/settings/core.settings | 2 +- doc/settings/mod.assoc | 2 +- doc/settings/mod.blowfish | 2 +- doc/settings/mod.channels | 2 +- doc/settings/mod.compress | 2 +- doc/settings/mod.console | 2 +- doc/settings/mod.ctcp | 2 +- doc/settings/mod.dns | 2 +- doc/settings/mod.filesys | 2 +- doc/settings/mod.ident | 2 +- doc/settings/mod.irc | 2 +- doc/settings/mod.notes | 2 +- doc/settings/mod.seen | 2 +- doc/settings/mod.server | 2 +- doc/settings/mod.share | 2 +- doc/settings/mod.transfer | 2 +- doc/settings/mod.uptime | 2 +- doc/settings/mod.woobie | 2 +- doc/sphinx_source/about/about.rst | 2 +- doc/sphinx_source/conf.py | 2 +- doc/sphinx_source/install/install.rst | 2 +- doc/sphinx_source/install/readme.rst | 2 +- doc/sphinx_source/modules/index.rst | 2 +- doc/sphinx_source/modules/mod/assoc.rst | 2 +- doc/sphinx_source/modules/mod/blowfish.rst | 2 +- doc/sphinx_source/modules/mod/channels.rst | 2 +- doc/sphinx_source/modules/mod/compress.rst | 2 +- doc/sphinx_source/modules/mod/console.rst | 2 +- doc/sphinx_source/modules/mod/ctcp.rst | 2 +- doc/sphinx_source/modules/mod/dns.rst | 2 +- doc/sphinx_source/modules/mod/filesys.rst | 2 +- doc/sphinx_source/modules/mod/ident.rst | 2 +- doc/sphinx_source/modules/mod/irc.rst | 2 +- doc/sphinx_source/modules/mod/notes.rst | 2 +- doc/sphinx_source/modules/mod/pbkdf2.rst | 2 +- doc/sphinx_source/modules/mod/seen.rst | 2 +- doc/sphinx_source/modules/mod/server.rst | 2 +- doc/sphinx_source/modules/mod/share.rst | 2 +- doc/sphinx_source/modules/mod/transfer.rst | 2 +- doc/sphinx_source/modules/mod/twitch.rst | 2 +- doc/sphinx_source/modules/mod/uptime.rst | 2 +- doc/sphinx_source/modules/mod/woobie.rst | 2 +- doc/sphinx_source/tutorials/firstscript.rst | 2 +- doc/sphinx_source/using/bans.rst | 2 +- doc/sphinx_source/using/botnet.rst | 2 +- doc/sphinx_source/using/core.rst | 2 +- doc/sphinx_source/using/features.rst | 2 +- doc/sphinx_source/using/ipv6.rst | 2 +- doc/sphinx_source/using/ircv3.rst | 2 +- doc/sphinx_source/using/partyline.rst | 2 +- doc/sphinx_source/using/patch.rst | 2 +- doc/sphinx_source/using/pbkdf2info.rst | 2 +- doc/sphinx_source/using/tcl-commands.rst | 2 +- doc/sphinx_source/using/text-sub.rst | 2 +- doc/sphinx_source/using/tls.rst | 2 +- doc/sphinx_source/using/tricks.rst | 2 +- doc/sphinx_source/using/users.rst | 2 +- doc/tcl-commands.doc | 2 +- logs/CONTENTS | 2 +- m4/tcl.m4 | 2 +- misc/genchanges | 2 +- misc/generatedocs | 2 +- misc/getcommit | 2 +- misc/killwhitespace | 2 +- misc/makedepend | 2 +- misc/modconfig | 2 +- misc/newversion | 2 +- misc/releaseprep | 2 +- misc/runautotools | 2 +- misc/setpatch | 4 +- misc/updatecopyright | 2 +- scripts/CONTENTS | 2 +- scripts/action.fix.tcl | 2 +- scripts/autobotchk | 6 +- scripts/compat.tcl | 2 +- scripts/ques5.tcl | 2 +- src/bg.c | 2 +- src/bg.h | 2 +- src/botcmd.c | 2 +- src/botmsg.c | 2 +- src/botnet.c | 2 +- src/chan.h | 2 +- src/chanprog.c | 2 +- src/cmds.c | 2 +- src/cmdt.h | 2 +- src/compat/base64.c | 2 +- src/compat/base64.h | 2 +- src/compat/compat.h | 2 +- src/compat/explicit_bzero.c | 2 +- src/compat/explicit_bzero.h | 2 +- src/compat/in6.h | 2 +- src/compat/inet_aton.c | 2 +- src/compat/inet_aton.h | 2 +- src/compat/snprintf.c | 2 +- src/compat/snprintf.h | 2 +- src/compat/strlcpy.c | 2 +- src/compat/strlcpy.h | 2 +- src/dcc.c | 2 +- src/dccutil.c | 2 +- src/dns.c | 2 +- src/dns.h | 2 +- src/eggdrop.h | 2 +- src/flags.c | 2 +- src/flags.h | 2 +- src/lang.h | 2 +- src/language.c | 2 +- src/main.c | 6 +- src/main.h | 2 +- src/mem.c | 2 +- src/misc.c | 2 +- src/misc_file.c | 2 +- src/misc_file.h | 2 +- src/mod/assoc.mod/assoc.c | 2 +- src/mod/assoc.mod/assoc.h | 2 +- src/mod/blowfish.mod/bf_tab.h | 2 +- src/mod/blowfish.mod/blowfish.c | 2 +- src/mod/blowfish.mod/blowfish.h | 2 +- src/mod/channels.mod/channels.c | 2 +- src/mod/channels.mod/channels.h | 2 +- src/mod/channels.mod/cmdschan.c | 2 +- src/mod/channels.mod/tclchan.c | 2 +- src/mod/channels.mod/udefchan.c | 2 +- src/mod/channels.mod/userchan.c | 2 +- src/mod/compress.mod/compress.c | 2 +- src/mod/compress.mod/compress.h | 2 +- src/mod/compress.mod/configure | 4 +- src/mod/compress.mod/configure.ac | 2 +- src/mod/compress.mod/tclcompress.c | 2 +- src/mod/console.mod/console.c | 2 +- src/mod/console.mod/console.h | 2 +- src/mod/ctcp.mod/ctcp.c | 2 +- src/mod/ctcp.mod/ctcp.h | 2 +- src/mod/dns.mod/configure | 4 +- src/mod/dns.mod/configure.ac | 2 +- src/mod/dns.mod/coredns.c | 2 +- src/mod/dns.mod/dns.c | 2 +- src/mod/dns.mod/dns.h | 2 +- src/mod/filesys.mod/dbcompat.c | 2 +- src/mod/filesys.mod/dbcompat.h | 2 +- src/mod/filesys.mod/filedb3.c | 2 +- src/mod/filesys.mod/filedb3.h | 2 +- src/mod/filesys.mod/filelist.c | 2 +- src/mod/filesys.mod/filelist.h | 2 +- src/mod/filesys.mod/files.c | 2 +- src/mod/filesys.mod/files.h | 2 +- src/mod/filesys.mod/filesys.c | 2 +- src/mod/filesys.mod/filesys.h | 2 +- src/mod/filesys.mod/tclfiles.c | 2 +- src/mod/ident.mod/ident.c | 2 +- src/mod/irc.mod/chan.c | 2 +- src/mod/irc.mod/cmdsirc.c | 2 +- src/mod/irc.mod/irc.c | 2 +- src/mod/irc.mod/irc.h | 2 +- src/mod/irc.mod/mode.c | 2 +- src/mod/irc.mod/msgcmds.c | 2 +- src/mod/irc.mod/tclirc.c | 2 +- src/mod/module.h | 2 +- src/mod/modvals.h | 2 +- src/mod/notes.mod/cmdsnote.c | 2 +- src/mod/notes.mod/notes.c | 2 +- src/mod/notes.mod/notes.h | 2 +- src/mod/pbkdf2.mod/pbkdf2.c | 2 +- src/mod/seen.mod/seen.c | 2 +- src/mod/server.mod/cmdsserv.c | 2 +- src/mod/server.mod/isupport.c | 2 +- src/mod/server.mod/server.c | 2 +- src/mod/server.mod/server.h | 2 +- src/mod/server.mod/servmsg.c | 2 +- src/mod/server.mod/tclisupport.c | 2 +- src/mod/server.mod/tclserv.c | 2 +- src/mod/share.mod/share.c | 2 +- src/mod/share.mod/share.h | 2 +- src/mod/share.mod/uf_features.c | 2 +- src/mod/transfer.mod/tcltransfer.c | 2 +- src/mod/transfer.mod/transfer.c | 2 +- src/mod/transfer.mod/transfer.h | 2 +- src/mod/transfer.mod/transferfstat.c | 2 +- src/mod/transfer.mod/transferqueue.c | 2 +- src/mod/twitch.mod/twitch.c | 2 +- src/mod/twitch.mod/twitch.h | 2 +- src/mod/uptime.mod/uptime.c | 2 +- src/mod/uptime.mod/uptime.h | 2 +- src/mod/woobie.mod/woobie.c | 2 +- src/modules.c | 2 +- src/modules.h | 2 +- src/net.c | 2 +- src/proto.h | 2 +- src/rfc1459.c | 2 +- src/stat.h | 2 +- src/tandem.h | 2 +- src/tcl.c | 2 +- src/tcldcc.c | 2 +- src/tclegg.h | 2 +- src/tclhash.c | 2 +- src/tclhash.h | 2 +- src/tclmisc.c | 2 +- src/tcluser.c | 2 +- src/tls.c | 2 +- src/userent.c | 2 +- src/userrec.c | 2 +- src/users.c | 2 +- src/users.h | 2 +- src/version.h | 2 +- text/CONTENTS | 2 +- text/banner | 2 +- 333 files changed, 6148 insertions(+), 6209 deletions(-) create mode 100644 doc/html/_static/sphinx_highlight.js diff --git a/AUTHORS b/AUTHORS index 0a0d78221..dc4275d08 100644 --- a/AUTHORS +++ b/AUTHORS @@ -104,4 +104,4 @@ See also: THANKS, doc/Versions, doc/Changes ------------------------------------------------------------------------------ Copyright (C) 1997 Robey Pointer -Copyright (C) 1999 - 2021 Eggheads Development Team +Copyright (C) 1999 - 2023 Eggheads Development Team diff --git a/CONTENTS b/CONTENTS index ac9540049..6b5dbc606 100644 --- a/CONTENTS +++ b/CONTENTS @@ -82,4 +82,4 @@ Last revised: September 21, 2018 Contains information on upgrading from a 1.6 bot to a 1.8 bot. _____________________________________________________________________ - Copyright (C) 2003 - 2021 Eggheads Development Team + Copyright (C) 2003 - 2023 Eggheads Development Team diff --git a/FEATURES b/FEATURES index 5f8fafe56..4de630f7e 100644 --- a/FEATURES +++ b/FEATURES @@ -44,4 +44,4 @@ Eggdrop Features Copyright (C) 1997 Robey Pointer -Copyright (C) 2000 - 2022 Eggheads Development Team +Copyright (C) 2000 - 2023 Eggheads Development Team diff --git a/INSTALL b/INSTALL index 6304d2628..1b355fd85 100644 --- a/INSTALL +++ b/INSTALL @@ -19,8 +19,6 @@ Eggdrop uses the GNU autoconfigure scripts to make things easier. correctly compile Eggdrop. It will also try to find Tcl, which is required to compile. - For macOS tcl and openssl see doc/COMPILE-GUIDE. - 2. Type either 'make config' or 'make iconfig' to determine which @@ -160,5 +158,5 @@ the README file. If not, then READ IT!&@#%@! Have fun with Eggdrop! - Copyright (C) 1997 Robey Pointer - Copyright (C) 1999 - 2022 Eggheads Development Team + Copyright (C) 1997 Robey Pointer Copyright (C) 1999 - 2022 Eggheads + Development Team diff --git a/NEWS b/NEWS index a884e737a..fcb16e621 100644 --- a/NEWS +++ b/NEWS @@ -36,7 +36,7 @@ Eggdrop v1.9.5: Module changes: - Updated woobie.mod with additional example code - Eggdrop config changes: + Eggdrop config changes: - None Documentation changes: @@ -317,4 +317,4 @@ Eggdrop v1.9.0: ________________________________________________________________________ Copyright (C) 1997 Robey Pointer -Copyright (C) 1999 - 2021 Eggheads Development Team +Copyright (C) 1999 - 2023 Eggheads Development Team diff --git a/aclocal.m4 b/aclocal.m4 index 1d8827d64..f0df8ce91 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -1,6 +1,6 @@ dnl aclocal.m4: macros autoconf uses when building configure from configure.ac dnl -dnl Copyright (C) 1999 - 2022 Eggheads Development Team +dnl Copyright (C) 1999 - 2023 Eggheads Development Team dnl dnl This program is free software; you can redistribute it and/or dnl modify it under the terms of the GNU General Public License diff --git a/config.h.in b/config.h.in index 1a412d315..cec70a8a3 100644 --- a/config.h.in +++ b/config.h.in @@ -2,7 +2,7 @@ /* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2022 Eggheads Development Team + * Copyright (C) 1999 - 2023 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/configure b/configure index 494e63381..a66f50b10 100755 --- a/configure +++ b/configure @@ -12,7 +12,7 @@ # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. # -# Copyright (C) 1999 - 2022 Eggheads Development Team +# Copyright (C) 1999 - 2023 Eggheads Development Team ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## @@ -1518,7 +1518,7 @@ Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. -Copyright (C) 1999 - 2022 Eggheads Development Team +Copyright (C) 1999 - 2023 Eggheads Development Team _ACEOF exit fi diff --git a/configure.ac b/configure.ac index c90d97e56..3ae5947e2 100644 --- a/configure.ac +++ b/configure.ac @@ -2,7 +2,7 @@ dnl configure.ac: this file is processed by autoconf to produce ./configure. AC_PREREQ(2.61) AC_INIT([Eggdrop],[1.9.4],[bugs@eggheads.org]) -AC_COPYRIGHT([Copyright (C) 1999 - 2022 Eggheads Development Team]) +AC_COPYRIGHT([Copyright (C) 1999 - 2023 Eggheads Development Team]) AC_LANG([C]) AC_REVISION([m4_esyscmd([misc/getcommit])]) AC_CONFIG_SRCDIR(src/eggdrop.h) @@ -14,7 +14,7 @@ AC_PRESERVE_HELP_ORDER dnl config.h stuff AH_TOP([/* * Copyright (C) 1997 Robey Pointer - * Copyright (C) 1999 - 2022 Eggheads Development Team + * Copyright (C) 1999 - 2023 Eggheads Development Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/doc/ABOUT b/doc/ABOUT index 30fb3e7ff..dd7301edd 100644 --- a/doc/ABOUT +++ b/doc/ABOUT @@ -55,4 +55,4 @@ About Eggdrop - Tcl -- Eggdrop cannot compile without Tcl installed on your shell. - Copyright (C) 1999 - 2022 Eggheads Development Team + Copyright (C) 1999 - 2023 Eggheads Development Team diff --git a/doc/BANS b/doc/BANS index 747f95ffa..0eb2ddfdb 100644 --- a/doc/BANS +++ b/doc/BANS @@ -75,4 +75,4 @@ Bans, Invites, and Exempts file) or until the channel goes -i again, whichever happens last. - Copyright (C) 1999 - 2022 Eggheads Development Team + Copyright (C) 1999 - 2023 Eggheads Development Team diff --git a/doc/BOTNET b/doc/BOTNET index d3e700766..cef4b16ee 100644 --- a/doc/BOTNET +++ b/doc/BOTNET @@ -1,4 +1,4 @@ -Botnet Sharing and Linking Last revised: Nov 09, 2017 +Botnet Sharing and Linking Botnet Sharing and Linking @@ -171,6 +171,16 @@ At this point, you can link the two bots by typing '.link BotA' on BotB passwords which are not stored encrypted in the userfile. Note that you can link as many bots as you wish to your botnet. +Secure (TLS) Links + +Since Eggdrop 1.8.0, the ability to encrypt bot links using TLS is +possible. On the hub bot you would prefix the port given in the listen +command with a +, and when you add the hub bot to the leaf, you would +prefix the port used in the .+bot command with a +. In other words, you +would set listen +5555 in the hub config and use .+bot hubbot 1.2.3.4 ++5555 on the leaf bot. These settings are explained more thoroughly in +the TLS botnet documentation. + USING BOTFLAGS Botflags are needed to assign special functions and tasks to your bots. @@ -338,4 +348,17 @@ MAKING BOTS SHARE USER RECORDS |-+beldin `-+Lameshare -Copyright (C) 1999 - 2022 Eggheads Development Team +USING CERTIFICATES TO AUTHENTICATE EGGDROPS + +Eggdrops can use certificates to authenticate when linking to each other +instead of a password. First, you must ensure you have set the +appropriate certificates in the ssl-privatekey and ssl-certificate +settings in the config file, and then enable the ssl-cert-auth setting. +Next, add the certificate on the partyline by using .fprint + to add the +fingerprint for the certificate currently in use, or .fprint to manually add a fingerprint. Once the config file +settings are set 0and fingerprints are added on the partyline, Eggdrops +will attempt to use their certificates intead of passwords for +authentication. + +Copyright (C) 1999 - 2023 Eggheads Development Team diff --git a/doc/COMPILE-GUIDE b/doc/COMPILE-GUIDE index 92ee2f4fb..7e4322866 100644 --- a/doc/COMPILE-GUIDE +++ b/doc/COMPILE-GUIDE @@ -581,4 +581,4 @@ Last revised: November 17, 2022 _____________________________________________________________________ Copyright (C) 1997 Robey Pointer - Copyright (C) 1999 - 2022 Eggheads Development Team + Copyright (C) 1999 - 2023 Eggheads Development Team diff --git a/doc/CONTENTS b/doc/CONTENTS index ba059a05e..a56d03cb4 100644 --- a/doc/CONTENTS +++ b/doc/CONTENTS @@ -72,4 +72,4 @@ Last revised: Nov 01, 2010 notes in reverse chronological order. _____________________________________________________________________ - Copyright (C) 2003 - 2021 Eggheads Development Team + Copyright (C) 2003 - 2023 Eggheads Development Team diff --git a/doc/FIRST-SCRIPT b/doc/FIRST-SCRIPT index c98d00674..919531af7 100644 --- a/doc/FIRST-SCRIPT +++ b/doc/FIRST-SCRIPT @@ -225,4 +225,4 @@ of salt!)
      -Copyright (C) 2003 - 2022 Eggheads Development Team +Copyright (C) 2003 - 2023 Eggheads Development Team diff --git a/doc/IPV6 b/doc/IPV6 index b088b8a8f..b181d3b14 100644 --- a/doc/IPV6 +++ b/doc/IPV6 @@ -77,4 +77,4 @@ Other affected variables: nat-ip works with IPv4 as it used to. It has no meaning for IPv6 and is not queried for IPv6 connections. -Copyright (C) 2010 - 2022 Eggheads Development Team +Copyright (C) 2010 - 2023 Eggheads Development Team diff --git a/doc/IRCv3 b/doc/IRCv3 index e72536ff9..2199771ee 100644 --- a/doc/IRCv3 +++ b/doc/IRCv3 @@ -54,4 +54,4 @@ The following capabilities are supported by Eggdrop: - setname - +typing -Copyright (C) 2010 - 2022 Eggheads Development Team +Copyright (C) 2010 - 2023 Eggheads Development Team diff --git a/doc/MODULES b/doc/MODULES index 9e6aeba41..b61a69b4b 100644 --- a/doc/MODULES +++ b/doc/MODULES @@ -418,4 +418,4 @@ WHAT TO DO WITH A MODULE? the modules directory on ftp.eggheads.org. Don't forget to mention in your text file which version Eggdrop the module is written for. -Copyright (C) 1999 - 2021 Eggheads Development Team +Copyright (C) 1999 - 2023 Eggheads Development Team diff --git a/doc/PARTYLINE b/doc/PARTYLINE index 4b4a030c1..3d490e611 100644 --- a/doc/PARTYLINE +++ b/doc/PARTYLINE @@ -34,4 +34,4 @@ prefixed with an apostrophe is sent to all users on the local bot only. You can change channels with the ".chat" command or even leave all channels with ".chat off". -Copyright (C) 2002 - 2022 Eggheads Development Team +Copyright (C) 2002 - 2023 Eggheads Development Team diff --git a/doc/PATCH-HOWTO b/doc/PATCH-HOWTO index abfa9c012..411ef0adc 100644 --- a/doc/PATCH-HOWTO +++ b/doc/PATCH-HOWTO @@ -34,4 +34,4 @@ To create a patch via github: 7. Pour yourself a cold one and bask in the warm feeling of contributing to the open source community! Karma++! -Copyright (C) 1999 - 2022 Eggheads Development Team +Copyright (C) 1999 - 2023 Eggheads Development Team diff --git a/doc/PBKDF2 b/doc/PBKDF2 index cbb4e5e81..7e60d55c7 100644 --- a/doc/PBKDF2 +++ b/doc/PBKDF2 @@ -138,4 +138,4 @@ where 'PBK method' is the method specified in the configuration file, 'salt' is the value used for the salt, and 'password hash' is the output of the hashing algorithm. -Copyright (C) 2000 - 2022 Eggheads Development Team +Copyright (C) 2000 - 2023 Eggheads Development Team diff --git a/doc/TLS b/doc/TLS index d4c9661d3..991217fd4 100644 --- a/doc/TLS +++ b/doc/TLS @@ -202,4 +202,4 @@ verification and authorization. Higher values enable specific exceptions like allowing self-signed or expired certificates. Details are documented in eggdrop.conf. -Copyright (C) 2010 - 2022 Eggheads Development Team +Copyright (C) 2010 - 2023 Eggheads Development Team diff --git a/doc/TRICKS b/doc/TRICKS index 157390db8..dfc5dbb6d 100644 --- a/doc/TRICKS +++ b/doc/TRICKS @@ -58,4 +58,4 @@ normal Tcl file. For example, you can set 'userfile' and 'chanfile' to set userfile "$myvar.user" set chanfile "$myvar.chan" -Copyright (C) 1999 - 2022 Eggheads Development Team +Copyright (C) 1999 - 2023 Eggheads Development Team diff --git a/doc/USERS b/doc/USERS index de72d3bf6..5e561135f 100644 --- a/doc/USERS +++ b/doc/USERS @@ -97,4 +97,4 @@ global flag applies to all channels. The standard global flags are: user-defined flags (Capital letters A through Z). These are used by scripts, and their uses vary depending on the script that uses them. -Copyright (C) 2002 - 2022 Eggheads Development Team +Copyright (C) 2002 - 2023 Eggheads Development Team diff --git a/doc/core.settings b/doc/core.settings index 236709f7f..28b090666 100644 --- a/doc/core.settings +++ b/doc/core.settings @@ -231,9 +231,7 @@ logfile "logs/logfile" set logfile-suffix ".%d%b%Y" If keep-all-logs is 1, this setting will define the suffix of the logfiles. The default will result in a suffix like "04May2000". "%Y%m%d" will produce the often used - yyyymmdd format. Read the strftime manpages for more options. NOTE: - On systems which don't support strftime, the default format will - always be used. + yyyymmdd format. Read the strftime manpages for more options. CONSOLE SETTINGS @@ -712,4 +710,4 @@ point. source scripts/alltools.tcl source scripts/action.fix.tcl -Copyright (C) 2000 - 2022 Eggheads Development Team +Copyright (C) 2000 - 2023 Eggheads Development Team diff --git a/doc/html/_static/basic.css b/doc/html/_static/basic.css index 9b49ca350..18255e5ae 100644 --- a/doc/html/_static/basic.css +++ b/doc/html/_static/basic.css @@ -4,7 +4,7 @@ * * Sphinx stylesheet -- basic theme. * - * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -15,6 +15,12 @@ div.clearer { clear: both; } +div.section::after { + display: block; + content: ''; + clear: left; +} + /* -- relbar ---------------------------------------------------------------- */ div.related { @@ -124,7 +130,7 @@ ul.search li a { font-weight: bold; } -ul.search li div.context { +ul.search li p.context { color: #888; margin: 2px 0 0 30px; text-align: left; @@ -216,7 +222,7 @@ table.modindextable td { /* -- general body styles --------------------------------------------------- */ div.body { - min-width: 450px; + min-width: 360px; max-width: 800px; } @@ -261,19 +267,25 @@ p.rubric { font-weight: bold; } -img.align-left, .figure.align-left, object.align-left { +img.align-left, figure.align-left, .figure.align-left, object.align-left { clear: left; float: left; margin-right: 1em; } -img.align-right, .figure.align-right, object.align-right { +img.align-right, figure.align-right, .figure.align-right, object.align-right { clear: right; float: right; margin-left: 1em; } -img.align-center, .figure.align-center, object.align-center { +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { display: block; margin-left: auto; margin-right: auto; @@ -287,30 +299,45 @@ img.align-center, .figure.align-center, object.align-center { text-align: center; } +.align-default { + text-align: center; +} + .align-right { text-align: right; } /* -- sidebars -------------------------------------------------------------- */ -div.sidebar { +div.sidebar, +aside.sidebar { margin: 0 0 0.5em 1em; border: 1px solid #ddb; - padding: 7px 7px 0 7px; + padding: 7px; background-color: #ffe; width: 40%; float: right; + clear: right; + overflow-x: auto; } p.sidebar-title { font-weight: bold; } +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + /* -- topics ---------------------------------------------------------------- */ +nav.contents, +aside.topic, div.topic { border: 1px solid #ccc; - padding: 7px 7px 0 7px; + padding: 7px; margin: 10px 0 10px 0; } @@ -332,10 +359,6 @@ div.admonition dt { font-weight: bold; } -div.admonition dl { - margin-bottom: 0; -} - p.admonition-title { margin: 0px 10px 5px 0px; font-weight: bold; @@ -346,9 +369,34 @@ div.body p.centered { margin-top: 25px; } +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + /* -- tables ---------------------------------------------------------------- */ table.docutils { + margin-top: 10px; + margin-bottom: 10px; border: 0; border-collapse: collapse; } @@ -358,6 +406,11 @@ table.align-center { margin-right: auto; } +table.align-default { + margin-left: auto; + margin-right: auto; +} + table caption span.caption-number { font-style: italic; } @@ -373,10 +426,6 @@ table.docutils td, table.docutils th { border-bottom: 1px solid #aaa; } -table.footnote td, table.footnote th { - border: 0 !important; -} - th { text-align: left; padding-right: 5px; @@ -391,22 +440,34 @@ table.citation td { border-bottom: none; } +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + /* -- figures --------------------------------------------------------------- */ -div.figure { +div.figure, figure { margin: 0.5em; padding: 0.5em; } -div.figure p.caption { +div.figure p.caption, figcaption { padding: 0.3em; } -div.figure p.caption span.caption-number { +div.figure p.caption span.caption-number, +figcaption span.caption-number { font-style: italic; } -div.figure p.caption span.caption-text { +div.figure p.caption span.caption-text, +figcaption span.caption-text { } /* -- field list styles ----------------------------------------------------- */ @@ -433,10 +494,71 @@ table.field-list td, table.field-list th { /* -- hlist styles ---------------------------------------------------------- */ +table.hlist { + margin: 1em 0; +} + table.hlist td { vertical-align: top; } +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + /* -- other body styles ----------------------------------------------------- */ @@ -460,11 +582,81 @@ ol.upperroman { list-style: upper-roman; } +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + dl { margin-bottom: 15px; } -dd p { +dd > :first-child { margin-top: 0px; } @@ -478,6 +670,11 @@ dd { margin-left: 30px; } +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + dt:target, span.highlighted { background-color: #fbe54e; } @@ -491,14 +688,6 @@ dl.glossary dt { font-size: 1.1em; } -.optional { - font-size: 1.3em; -} - -.sig-paren { - font-size: larger; -} - .versionmodified { font-style: italic; } @@ -537,6 +726,13 @@ dl.glossary dt { font-style: oblique; } +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + abbr, acronym { border-bottom: dotted 1px; cursor: help; @@ -549,29 +745,69 @@ pre { overflow-y: hidden; /* fixes display issues on Chrome browsers */ } +pre, div[class*="highlight-"] { + clear: both; +} + span.pre { -moz-hyphens: none; -ms-hyphens: none; -webkit-hyphens: none; hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; } td.linenos pre { - padding: 5px 0px; border: 0; background-color: transparent; color: #aaa; } table.highlighttable { - margin-left: 0.5em; + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; } table.highlighttable td { - padding: 0 0.5em 0 0.5em; + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; } div.code-block-caption { + margin-top: 1em; padding: 2px 5px; font-size: small; } @@ -580,8 +816,14 @@ div.code-block-caption code { background-color: transparent; } -div.code-block-caption + div > div.highlight > pre { - margin-top: 0; +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ } div.code-block-caption span.caption-number { @@ -593,21 +835,7 @@ div.code-block-caption span.caption-text { } div.literal-block-wrapper { - padding: 1em 1em 0; -} - -div.literal-block-wrapper div.highlight { - margin: 0; -} - -code.descname { - background-color: transparent; - font-weight: bold; - font-size: 1.2em; -} - -code.descclassname { - background-color: transparent; + margin: 1em 0; } code.xref, a code { @@ -648,8 +876,7 @@ span.eqno { } span.eqno a.headerlink { - position: relative; - left: 0px; + position: absolute; z-index: 1; } diff --git a/doc/html/_static/doctools.js b/doc/html/_static/doctools.js index 344db17dd..d06a71d75 100644 --- a/doc/html/_static/doctools.js +++ b/doc/html/_static/doctools.js @@ -2,314 +2,155 @@ * doctools.js * ~~~~~~~~~~~ * - * Sphinx JavaScript utilities for all documentation. + * Base JavaScript utilities for all Sphinx HTML documentation. * - * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ - -/** - * select a different prefix for underscore - */ -$u = _.noConflict(); - -/** - * make the code below compatible with browsers without - * an installed firebug like debugger -if (!window.console || !console.firebug) { - var names = ["log", "debug", "info", "warn", "error", "assert", "dir", - "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", - "profile", "profileEnd"]; - window.console = {}; - for (var i = 0; i < names.length; ++i) - window.console[names[i]] = function() {}; -} - */ - -/** - * small helper function to urldecode strings - */ -jQuery.urldecode = function(x) { - return decodeURIComponent(x).replace(/\+/g, ' '); -}; - -/** - * small helper function to urlencode strings - */ -jQuery.urlencode = encodeURIComponent; - -/** - * This function returns the parsed url parameters of the - * current request. Multiple values per key are supported, - * it will always return arrays of strings for the value parts. - */ -jQuery.getQueryParameters = function(s) { - if (typeof s === 'undefined') - s = document.location.search; - var parts = s.substr(s.indexOf('?') + 1).split('&'); - var result = {}; - for (var i = 0; i < parts.length; i++) { - var tmp = parts[i].split('=', 2); - var key = jQuery.urldecode(tmp[0]); - var value = jQuery.urldecode(tmp[1]); - if (key in result) - result[key].push(value); - else - result[key] = [value]; +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); } - return result; }; -/** - * highlight a given string on a jquery object by wrapping it in - * span elements with the given class name. - */ -jQuery.fn.highlightText = function(text, className) { - function highlight(node, addItems) { - if (node.nodeType === 3) { - var val = node.nodeValue; - var pos = val.toLowerCase().indexOf(text); - if (pos >= 0 && - !jQuery(node.parentNode).hasClass(className) && - !jQuery(node.parentNode).hasClass("nohighlight")) { - var span; - var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); - if (isInSVG) { - span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); - } else { - span = document.createElement("span"); - span.className = className; - } - span.appendChild(document.createTextNode(val.substr(pos, text.length))); - node.parentNode.insertBefore(span, node.parentNode.insertBefore( - document.createTextNode(val.substr(pos + text.length)), - node.nextSibling)); - node.nodeValue = val.substr(0, pos); - if (isInSVG) { - var bbox = span.getBBox(); - var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); - rect.x.baseVal.value = bbox.x; - rect.y.baseVal.value = bbox.y; - rect.width.baseVal.value = bbox.width; - rect.height.baseVal.value = bbox.height; - rect.setAttribute('class', className); - var parentOfText = node.parentNode.parentNode; - addItems.push({ - "parent": node.parentNode, - "target": rect}); - } - } - } - else if (!jQuery(node).is("button, select, textarea")) { - jQuery.each(node.childNodes, function() { - highlight(this, addItems); - }); - } - } - var addItems = []; - var result = this.each(function() { - highlight(this, addItems); - }); - for (var i = 0; i < addItems.length; ++i) { - jQuery(addItems[i].parent).before(addItems[i].target); - } - return result; -}; - -/* - * backward compatibility for jQuery.browser - * This will be supported until firefox bug is fixed. - */ -if (!jQuery.browser) { - jQuery.uaMatch = function(ua) { - ua = ua.toLowerCase(); - - var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || - /(webkit)[ \/]([\w.]+)/.exec(ua) || - /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || - /(msie) ([\w.]+)/.exec(ua) || - ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || - []; - - return { - browser: match[ 1 ] || "", - version: match[ 2 ] || "0" - }; - }; - jQuery.browser = {}; - jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; -} - /** * Small JavaScript module for the documentation. */ -var Documentation = { - - init : function() { - this.fixFirefoxAnchorBug(); - this.highlightSearchWords(); - this.initIndexTable(); - if (DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) { - this.initOnKeyListeners(); - } +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); }, /** * i18n support */ - TRANSLATIONS : {}, - PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, - LOCALE : 'unknown', + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", // gettext and ngettext don't access this so that the functions // can safely bound to a different name (_ = Documentation.gettext) - gettext : function(string) { - var translated = Documentation.TRANSLATIONS[string]; - if (typeof translated === 'undefined') - return string; - return (typeof translated === 'string') ? translated : translated[0]; - }, - - ngettext : function(singular, plural, n) { - var translated = Documentation.TRANSLATIONS[singular]; - if (typeof translated === 'undefined') - return (n == 1) ? singular : plural; - return translated[Documentation.PLURALEXPR(n)]; + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } }, - addTranslations : function(catalog) { - for (var key in catalog.messages) - this.TRANSLATIONS[key] = catalog.messages[key]; - this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); - this.LOCALE = catalog.locale; + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; }, - /** - * add context elements like header anchor links - */ - addContextElements : function() { - $('div[id] > :header:first').each(function() { - $('\u00B6'). - attr('href', '#' + this.id). - attr('title', _('Permalink to this headline')). - appendTo(this); - }); - $('dt[id]').each(function() { - $('\u00B6'). - attr('href', '#' + this.id). - attr('title', _('Permalink to this definition')). - appendTo(this); - }); + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; }, /** - * workaround a firefox stupidity - * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 + * helper function to focus on search bar */ - fixFirefoxAnchorBug : function() { - if (document.location.hash && $.browser.mozilla) - window.setTimeout(function() { - document.location.href += ''; - }, 10); + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); }, /** - * highlight the search words provided in the url in the text + * Initialise the domain index toggle buttons */ - highlightSearchWords : function() { - var params = $.getQueryParameters(); - var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; - if (terms.length) { - var body = $('div.body'); - if (!body.length) { - body = $('body'); + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); } - window.setTimeout(function() { - $.each(terms, function() { - body.highlightText(this.toLowerCase(), 'highlighted'); - }); - }, 10); - $('') - .appendTo($('#searchbox')); - } - }, - - /** - * init the domain index toggle buttons - */ - initIndexTable : function() { - var togglers = $('img.toggler').click(function() { - var src = $(this).attr('src'); - var idnum = $(this).attr('id').substr(7); - $('tr.cg-' + idnum).toggle(); - if (src.substr(-9) === 'minus.png') - $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); - else - $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); - }).css('display', ''); - if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { - togglers.click(); - } - }, - - /** - * helper function to hide the search marks again - */ - hideSearchWords : function() { - $('#searchbox .highlight-link').fadeOut(300); - $('span.highlighted').removeClass('highlighted'); - }, - - /** - * make the url absolute - */ - makeURL : function(relativeURL) { - return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; - }, + }; - /** - * get the current relative url - */ - getCurrentURL : function() { - var path = document.location.pathname; - var parts = path.split(/\//); - $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { - if (this === '..') - parts.pop(); - }); - var url = parts.join('/'); - return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); }, - initOnKeyListeners: function() { - $(document).keyup(function(event) { - var activeElementType = document.activeElement.tagName; - // don't navigate when in search box or textarea - if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT') { - switch (event.keyCode) { - case 37: // left - var prevHref = $('link[rel="prev"]').prop('href'); - if (prevHref) { - window.location.href = prevHref; - return false; + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); } - case 39: // right - var nextHref = $('link[rel="next"]').prop('href'); - if (nextHref) { - window.location.href = nextHref; - return false; + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); } + break; } } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } }); - } + }, }; // quick alias for translations -_ = Documentation.gettext; +const _ = Documentation.gettext; -$(document).ready(function() { - Documentation.init(); -}); +_ready(Documentation.init); diff --git a/doc/html/_static/documentation_options.js b/doc/html/_static/documentation_options.js index c0721a95a..dbe4282de 100644 --- a/doc/html/_static/documentation_options.js +++ b/doc/html/_static/documentation_options.js @@ -1,10 +1,14 @@ var DOCUMENTATION_OPTIONS = { URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), VERSION: '1.9.4', - LANGUAGE: 'None', + LANGUAGE: 'en', COLLAPSE_INDEX: false, + BUILDER: 'html', FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', HAS_SOURCE: true, SOURCELINK_SUFFIX: '.txt', NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, }; \ No newline at end of file diff --git a/doc/html/_static/language_data.js b/doc/html/_static/language_data.js index 5266fb19e..250f5665f 100644 --- a/doc/html/_static/language_data.js +++ b/doc/html/_static/language_data.js @@ -5,15 +5,16 @@ * This script contains the language-specific data used by searchtools.js, * namely the list of stopwords, stemmer, scorer and splitter. * - * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ -var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"]; +var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; -/* Non-minified version JS is _stemmer.js if file is provided */ +/* Non-minified version is copied as a separate JS file, is available */ + /** * Porter Stemmer */ @@ -196,102 +197,3 @@ var Stemmer = function() { } } - - - - -var splitChars = (function() { - var result = {}; - var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648, - 1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702, - 2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971, - 2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345, - 3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761, - 3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823, - 4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125, - 8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695, - 11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587, - 43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141]; - var i, j, start, end; - for (i = 0; i < singles.length; i++) { - result[singles[i]] = true; - } - var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709], - [722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161], - [1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568], - [1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807], - [1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047], - [2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383], - [2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450], - [2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547], - [2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673], - [2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820], - [2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946], - [2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023], - [3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173], - [3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332], - [3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481], - [3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718], - [3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791], - [3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095], - [4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205], - [4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687], - [4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968], - [4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869], - [5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102], - [6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271], - [6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592], - [6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822], - [6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167], - [7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959], - [7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143], - [8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318], - [8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483], - [8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101], - [10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567], - [11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292], - [12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444], - [12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783], - [12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311], - [19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511], - [42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774], - [42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071], - [43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263], - [43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519], - [43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647], - [43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967], - [44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295], - [57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274], - [64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007], - [65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381], - [65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]]; - for (i = 0; i < ranges.length; i++) { - start = ranges[i][0]; - end = ranges[i][1]; - for (j = start; j <= end; j++) { - result[j] = true; - } - } - return result; -})(); - -function splitQuery(query) { - var result = []; - var start = -1; - for (var i = 0; i < query.length; i++) { - if (splitChars[query.charCodeAt(i)]) { - if (start !== -1) { - result.push(query.slice(start, i)); - start = -1; - } - } else if (start === -1) { - start = i; - } - } - if (start !== -1) { - result.push(query.slice(start)); - } - return result; -} - - diff --git a/doc/html/_static/pygments.css b/doc/html/_static/pygments.css index 20c4814dc..691aeb82d 100644 --- a/doc/html/_static/pygments.css +++ b/doc/html/_static/pygments.css @@ -1,5 +1,10 @@ +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight .hll { background-color: #ffffcc } -.highlight { background: #eeffcc; } +.highlight { background: #eeffcc; } .highlight .c { color: #408090; font-style: italic } /* Comment */ .highlight .err { border: 1px solid #FF0000 } /* Error */ .highlight .k { color: #007020; font-weight: bold } /* Keyword */ diff --git a/doc/html/_static/searchtools.js b/doc/html/_static/searchtools.js index 5ff318066..97d56a74d 100644 --- a/doc/html/_static/searchtools.js +++ b/doc/html/_static/searchtools.js @@ -4,22 +4,24 @@ * * Sphinx JavaScript utilities for the full-text search. * - * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ +"use strict"; -if (!Scorer) { - /** - * Simple result scoring code. - */ +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { var Scorer = { // Implement the following function to further tweak the score for each result - // The function takes a result array [filename, title, anchor, descr, score] + // The function takes a result array [docname, title, anchor, descr, score, filename] // and returns the new score. /* - score: function(result) { - return result[4]; + score: result => { + const [docname, title, anchor, descr, score, filename] = result + return score }, */ @@ -28,423 +30,508 @@ if (!Scorer) { // or matches in the last dotted part of the object name objPartialMatch: 6, // Additive scores depending on the priority of the object - objPrio: {0: 15, // used to be importantResults - 1: 5, // used to be objectResults - 2: -5}, // used to be unimportantResults + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, // Used when the priority is not in the mapping. objPrioDefault: 0, // query found in title title: 15, + partialTitle: 7, // query found in terms - term: 5 + term: 5, + partialTerm: 2, }; } -if (!splitQuery) { - function splitQuery(query) { - return query.split(/\s+/); +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + + const [docName, title, anchor, descr, score, _filename] = item; + + let listItem = document.createElement("li"); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = docUrlRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = docUrlRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms) + ); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = _( + `Search finished, found ${resultCount} page(s) matching the search query.` + ); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings } /** * Search Module */ -var Search = { - - _index : null, - _queued_query : null, - _pulse_status : -1, - - init : function() { - var params = $.getQueryParameters(); - if (params.q) { - var query = params.q[0]; - $('input[name="q"]')[0].value = query; - this.performSearch(query); - } +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent !== undefined) return docContent.textContent; + console.warn( + "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." + ); + return ""; }, - loadIndex : function(url) { - $.ajax({type: "GET", url: url, data: null, - dataType: "script", cache: true, - complete: function(jqxhr, textstatus) { - if (textstatus != "success") { - document.getElementById("searchindexloader").src = url; - } - }}); + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); }, - setIndex : function(index) { - var q; - this._index = index; - if ((q = this._queued_query) !== null) { - this._queued_query = null; - Search.query(q); + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); } }, - hasIndex : function() { - return this._index !== null; - }, + hasIndex: () => Search._index !== null, - deferQuery : function(query) { - this._queued_query = query; - }, + deferQuery: (query) => (Search._queued_query = query), - stopPulse : function() { - this._pulse_status = 0; - }, + stopPulse: () => (Search._pulse_status = -1), - startPulse : function() { - if (this._pulse_status >= 0) - return; - function pulse() { - var i; + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { Search._pulse_status = (Search._pulse_status + 1) % 4; - var dotString = ''; - for (i = 0; i < Search._pulse_status; i++) - dotString += '.'; - Search.dots.text(dotString); - if (Search._pulse_status > -1) - window.setTimeout(pulse, 500); - } + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; pulse(); }, /** * perform a search for something (or wait until index is loaded) */ - performSearch : function(query) { + performSearch: (query) => { // create the required interface elements - this.out = $('#search-results'); - this.title = $('

      ' + _('Searching') + '

      ').appendTo(this.out); - this.dots = $('').appendTo(this.title); - this.status = $('

      ').appendTo(this.out); - this.output = $(' -

      Using Eggdrop

      +

      Using Eggdrop

      -

      Tutorials

      +

      Tutorials

      -

      Eggdrop Modules

      +

      Eggdrop Modules

      -

      About Eggdrop

      +

      About Eggdrop

      So this is how we register C callbacks for binds with the correct arguments:

      - -
      -

      Summary

      + +
      +

      Summary

      In summary, this is how the dcc bind is called:

        -
      • check_tcl_dcc() creates Tcl variables $_dcc1 $_dcc2 $_dcc3 and lets check_tcl_bind call the binds
      • -
      • Tcl binds are done at this point
      • -
      • C binds mean the Tcl command associated with the bind is *dcc:boot which calls builtin_dcc which gets cmd_boot as ClientData cd argument
      • -
      • buildin_dcc performs some sanity checking to avoid crashes and then calls cmd_boot() aka F() with the arguments it wants C callbacks to have
      • +
      • check_tcl_dcc() creates Tcl variables $_dcc1 $_dcc2 $_dcc3 and lets check_tcl_bind call the binds

      • +
      • Tcl binds are done at this point

      • +
      • C binds mean the Tcl command associated with the bind is *dcc:boot which calls builtin_dcc which gets cmd_boot as ClientData cd argument

      • +
      • gbuildin_dcc performs some sanity checking to avoid crashes and then calls cmd_boot() aka F() with the arguments it wants C callbacks to have

      -

      Example edited and annotated gdb backtrace in cmd_boot after doing .boot test on the partyline as user thommey with typical owner flags.

      +

      Example edited and annotated gdb backtrace in :code::cmd_boot after doing .boot test on the partyline as user thommey with typical owner flags.

      #0  cmd_boot (u=0x55e8bd8a49b0, idx=4, par=0x55e8be6a0010 "test") at cmds.c:614
           *u = {next = 0x55e8bd8aec90, handle = "thommey", flags = 8977024, flags_udef = 0, chanrec = 0x55e8bd8aeae0, entries = 0x55e8bd8a4a10}
       #1  builtin_dcc (cd=0x55e8bbf002d0 <cmd_boot>, irp=0x55e8bd59b1c0, argc=4, argv=0x55e8bd7e3e00) at tclhash.c:678
      @@ -355,10 +350,11 @@ 

      Summary

      @@ -371,7 +367,7 @@

      Summary
      - previous | next @@ -383,9 +379,9 @@

      Summary

      diff --git a/doc/html/modules/irc.html b/doc/html/modules/irc.html index f12063f7e..868377b61 100644 --- a/doc/html/modules/irc.html +++ b/doc/html/modules/irc.html @@ -255,7 +255,7 @@

      Search

      set this to 0.
      -

      Copyright (C) 2000 - 2022 Eggheads Development Team

      +

      Copyright (C) 2000 - 2023 Eggheads Development Team

      diff --git a/doc/html/modules/mod/assoc.html b/doc/html/modules/mod/assoc.html index 546553921..39f962f04 100644 --- a/doc/html/modules/mod/assoc.html +++ b/doc/html/modules/mod/assoc.html @@ -1,28 +1,23 @@ - + - + - - + + + Assoc Module — Eggdrop 1.9.4 documentation - - - - - - - + + + + +

      ---- - - - +
      +
      0turn off
      + + + - - + + - - + + - - + + - - + + - - + + - + - - + + - +

      0

      turn off

      1isoptest (allow serverop if registered op)

      1

      isoptest (allow serverop if registered op)

      2wasoptest (allow serverop if user had op before split)

      2

      wasoptest (allow serverop if user had op before split)

      3allow serverop if isop or wasop

      3

      allow serverop if isop or wasop

      4allow serverop if isop and wasop.

      4

      allow serverop if isop and wasop.

      5If the channel is -bitch, see stopnethack-mode 3

      5

      If the channel is -bitch, see stopnethack-mode 3

      If the channel is +bitch, see stopnethack-mode 1

      If the channel is +bitch, see stopnethack-mode 1

      6If the channel is -bitch, see stopnethack-mode 2

      6

      If the channel is -bitch, see stopnethack-mode 2

      If the channel is +bitch, see stopnethack-mode 4

      If the channel is +bitch, see stopnethack-mode 4

      -
      revenge-mode 0
      -

      This settings defines how the bot should punish bad users when +

      revenge-mode 0

      This settings defines how the bot should punish bad users when revenging. There are four possible settings:

      -
      -
      ---- - - - +
      +
      0Deop the user.
      + + + - - + + - - + + - - + +

      0

      Deop the user.

      1Deop the user and give them the +d flag for the channel.

      1

      Deop the user and give them the +d flag for the channel.

      2Deop the user, give them the +d flag for the channel, and kick them.

      2

      Deop the user, give them the +d flag for the channel, and kick them.

      3Deop the user, give them the +d flag for the channel, kick, and ban them.

      3

      Deop the user, give them the +d flag for the channel, kick, and ban them.

      -
      ban-type 3
      -

      This setting defines what type of bans should eggdrop place for +

      ban-type 3

      This setting defines what type of bans should eggdrop place for +k users or when revenge-mode is 3. Available types are:

      -
      ---- - - +
      0 *!user@host
      + + - + - + - + - + - + - + - + - + - +

      0 *!user@host

      1 *!*user@host

      1 *!*user@host

      2 *!*@host

      2 *!*@host

      3 *!*user@*.host

      3 *!*user@*.host

      4 *!*@*.host

      4 *!*@*.host

      5 nick!user@host

      5 nick!user@host

      6 nick!*user@host

      6 nick!*user@host

      7 nick!*@host

      7 nick!*@host

      8 nick!*user@*.host

      8 nick!*user@*.host

      9 nick!*@*.host

      9 nick!*@*.host

      -

      You can also specify types from 10 to 19 which correspond to types +

      You can also specify types from 10 to 19 which correspond to types 0 to 9, but instead of using a * wildcard to replace portions of the host, only numbers in hostnames are replaced with the ‘?’ wildcard. Same is valid for types 20-29, but instead of ‘?’, the ‘*’ wildcard will be used. Types 30-39 set the host to ‘*’.

      -
      ban-time 120
      -
      Set here how long temporary bans will last (in minutes). If you -set this setting to 0, the bot will never remove them.
      -
      exempt-time 60
      -
      Set here how long temporary exempts will last (in minutes). If you set +
      ban-time 120

      Set here how long temporary bans will last (in minutes). If you +set this setting to 0, the bot will never remove them.

      +
      +
      exempt-time 60

      Set here how long temporary exempts will last (in minutes). If you set this setting to 0, the bot will never remove them. The bot will check the exempts every X minutes, but will not remove the exempt if a ban is set on the channel that matches that exempt. Once the ban is removed, then the exempt will be removed the next time the bot checks. Please -note that this is an IRCnet feature.

      -
      invite-time 60
      -
      Set here how long temporary invites will last (in minutes). If you set +note that this is an IRCnet feature.

      +
      +
      invite-time 60

      Set here how long temporary invites will last (in minutes). If you set this setting to 0, the bot will never remove them. The bot will check the invites every X minutes, but will not remove the invite if a channel is set to +i. Once the channel is -i then the invite will be removed the next time the bot checks. Please note that this is an -IRCnet feature.

      -
      aop-delay (minimum:maximum)
      -
      +IRCnet feature.

      +
      +
      aop-delay (minimum:maximum)

      This is used for autoop, autohalfop, autovoice. If an op or voice joins a channel while another op or voice is pending, the bot will attempt to put both modes on one line.

      -
      ---- - - - +
      aop-delay 0No delay is used.
      + + + - - + + - - + +

      aop-delay 0

      No delay is used.

      aop-delay XAn X second delay is used.

      aop-delay X

      An X second delay is used.

      aop-delay X:YA random delay between X and Y is used.

      aop-delay X:Y

      A random delay between X and Y is used.

      -
      -
      need-op { putserv “PRIVMSG #lamest :op me cos i’m lame!” }
      -
      This setting will make the bot run the script enclosed in braces +
      +
      need-op { putserv “PRIVMSG #lamest :op me cos i’m lame!” }

      This setting will make the bot run the script enclosed in braces if it does not have ops. This must be shorter than 120 characters. If you use scripts like getops.tcl or botnetop.tcl, you don’t need -to set this setting.

      -
      need-invite { putserv “PRIVMSG #lamest :let me in!” }
      -
      This setting will make the bot run the script enclosed in braces +to set this setting.

      +
      +
      need-invite { putserv “PRIVMSG #lamest :let me in!” }

      This setting will make the bot run the script enclosed in braces if it needs an invite to the channel. This must be shorter than 120 characters. If you use scripts like getops.tcl or botnetop.tcl, you -don’t need to set this setting.

      -
      need-key { putserv “PRIVMSG #lamest :let me in!” }
      -
      This setting will make the bot run the script enclosed in braces +don’t need to set this setting.

      +
      +
      need-key { putserv “PRIVMSG #lamest :let me in!” }

      This setting will make the bot run the script enclosed in braces if it needs the key to the channel. This must be shorter than 120 characters. If you use scripts like getops.tcl or botnetop.tcl, you -don’t need to set this setting.

      -
      need-unban { putserv “PRIVMSG #lamest :let me in!” }
      -
      This setting will make the bot run the script enclosed in braces +don’t need to set this setting.

      +
      +
      need-unban { putserv “PRIVMSG #lamest :let me in!” }

      This setting will make the bot run the script enclosed in braces if it needs to be unbanned on the channel. This must be shorter than 120 characters. If you use scripts like getops.tcl or botnetop.tcl, -you don’t need to set this setting.

      -
      need-limit { putserv “PRIVMSG #lamest :let me in!” }
      -
      This setting will make the bot run the script enclosed in braces +you don’t need to set this setting.

      +
      +
      need-limit { putserv “PRIVMSG #lamest :let me in!” }

      This setting will make the bot run the script enclosed in braces if it needs the limit to be raised on the channel. This must be shorter than 120 characters. If you use scripts like getops.tcl or -botnetop.tcl, you don’t need to set this setting.

      -
      flood-chan 15:60
      -
      Set here how many channel messages in how many seconds from one +botnetop.tcl, you don’t need to set this setting.

      +
      +
      flood-chan 15:60

      Set here how many channel messages in how many seconds from one host constitutes a flood. Setting this to 0, 0:X or X:0 disables text -flood protection for the channel, where X is an integer >= 0.

      -
      flood-deop 3:10
      -
      Set here how many deops in how many seconds from one host constitutes +flood protection for the channel, where X is an integer >= 0.

      +
      +
      flood-deop 3:10

      Set here how many deops in how many seconds from one host constitutes a flood. Setting this to 0, 0:X or X:0 disables deop flood protection for -the channel, where X is an integer >= 0.

      -
      flood-kick 3:10
      -
      Set here how many kicks in how many seconds from one host constitutes +the channel, where X is an integer >= 0.

      +
      +
      flood-kick 3:10

      Set here how many kicks in how many seconds from one host constitutes a flood. Setting this to 0, 0:X or X:0 disables kick flood protection for -the channel, where X is an integer >= 0.

      -
      flood-join 5:60
      -
      Set here how many joins in how many seconds from one host constitutes +the channel, where X is an integer >= 0.

      +
      +
      flood-join 5:60

      Set here how many joins in how many seconds from one host constitutes a flood. Setting this to 0, 0:X or X:0 disables join flood protection for -the channel, where X is an integer >= 0.

      -
      flood-ctcp 3:60
      -
      Set here how many channel ctcps in how many seconds from one host +the channel, where X is an integer >= 0.

      +
      +
      flood-ctcp 3:60

      Set here how many channel ctcps in how many seconds from one host constitutes a flood. Setting this to 0, 0:X or X:0 disables ctcp flood -protection for the channel, where X is an integer >= 0.

      -
      flood-nick 5:60
      -
      Set here how many nick changes in how many seconds from one host +protection for the channel, where X is an integer >= 0.

      +
      +
      flood-nick 5:60

      Set here how many nick changes in how many seconds from one host constitutes a flood. Setting this to 0, 0:X or X:0 disables nick flood -protection for the channel, where X is an integer >= 0.

      +protection for the channel, where X is an integer >= 0.

      +
      -
      channel set <chan> +/-<setting>
      -

      There are many different options for channels which you can define. +

      channel set <chan> +/-<setting>

      There are many different options for channels which you can define. They can be enabled or disabled by a plus or minus in front of them.

      A complete list of all available channel settings:

      -
      -
      -
      enforcebans
      -
      When a ban is set, kick people who are on the channel and match -the ban?
      -
      dynamicbans
      -
      Only activate bans on the channel when necessary? This keeps the +
      +
      +
      enforcebans

      When a ban is set, kick people who are on the channel and match +the ban?

      +
      +
      dynamicbans

      Only activate bans on the channel when necessary? This keeps the channel’s ban list from getting excessively long. The bot still remembers every ban, but it only activates a ban on the channel -when it sees someone join who matches that ban.

      -
      userbans
      -
      Allow bans to be made by users directly? If turned off, the bot will -require all bans to be made through the bot’s console.
      -
      dynamicexempts
      -
      Only activate exempts on the channel when necessary? This keeps the +when it sees someone join who matches that ban.

      +
      +
      userbans

      Allow bans to be made by users directly? If turned off, the bot will +require all bans to be made through the bot’s console.

      +
      +
      dynamicexempts

      Only activate exempts on the channel when necessary? This keeps the channel’s exempt list from getting excessively long. The bot still remembers every exempt, but it only activates a exempt on the channel when it sees a ban set that matches the exempt. The exempt remains -active on the channel for as long as the ban is still active.

      -
      userexempts
      -
      Allow exempts to be made by users directly? If turned off, the bot will -require all exempts to be made through the bot’s console.
      -
      dynamicinvites
      -
      Only activate invites on the channel when necessary? This keeps the +active on the channel for as long as the ban is still active.

      +
      +
      userexempts

      Allow exempts to be made by users directly? If turned off, the bot will +require all exempts to be made through the bot’s console.

      +
      +
      dynamicinvites

      Only activate invites on the channel when necessary? This keeps the channel’s invite list from getting excessively long. The bot still remembers every invite, but the invites are only activated when the channel is set to invite only and a user joins after requesting an -invite. Once set, the invite remains until the channel goes to -i.

      -
      userinvites
      -
      Allow invites to be made by users directly? If turned off, the bot -will require all invites to be made through the bot’s console.
      -
      autoop
      -
      Op users with the +o flag as soon as they join the channel? -This is insecure and not recommended.
      -
      autohalfop
      -
      Halfop users with the +l flag as soon as they join the channel? -This is insecure and not recommended.
      -
      bitch
      -
      Only let users with the +o flag have op on the channel?
      -
      greet
      -
      Say a user’s info line when they join the channel?
      -
      protectops
      -
      Re-op a user with the +o flag if they get deopped?
      -
      protecthalfops
      -
      Re-halfop a user with the +l flag if they get dehalfopped?
      -
      protectfriends
      -
      Re-op a user with the +f flag if they get deopped?
      -
      statuslog
      -

      Log the channel status line every 5 minutes? This shows the bot’s +invite. Once set, the invite remains until the channel goes to -i.

      +
      +
      userinvites

      Allow invites to be made by users directly? If turned off, the bot +will require all invites to be made through the bot’s console.

      +
      +
      autoop

      Op users with the +o flag as soon as they join the channel? +This is insecure and not recommended.

      +
      +
      autohalfop

      Halfop users with the +l flag as soon as they join the channel? +This is insecure and not recommended.

      +
      +
      bitch

      Only let users with the +o flag have op on the channel?

      +
      +
      greet

      Say a user’s info line when they join the channel?

      +
      +
      protectops

      Re-op a user with the +o flag if they get deopped?

      +
      +
      protecthalfops

      Re-halfop a user with the +l flag if they get dehalfopped?

      +
      +
      protectfriends

      Re-op a user with the +f flag if they get deopped?

      +
      +
      statuslog

      Log the channel status line every 5 minutes? This shows the bot’s status on the channel (op, voice, etc.), the channel’s modes, and the total number of members, ops, voices, regular users, and +b, +e, and +I modes on the channel. A sample status line follows:

      -
      -
      [01:40] @#lamest (+istn) : [m/1 o/1 v/4 n/7 b/1 e/5 I/7]
      -
      -
      revenge
      -
      Remember people who deop/kick/ban the bot, valid ops, or friends -and punish them? Users with the +f flag are exempt from revenge.
      -
      revengebot
      -
      This is similar to to the ‘revenge’ option, but it only triggers -if a bot gets deopped, kicked or banned.
      -
      autovoice
      -
      Voice users with the +v flag when they join the channel?
      -
      secret
      -
      Prevent this channel from being listed on the botnet?
      -
      shared
      -
      Share channel-related user info for this channel?
      -
      cycle
      -
      Cycle the channel when it has no ops?
      -
      dontkickops
      -
      Do you want the bot not to be able to kick users who have the +o +
      +

      [01:40] @#lamest (+istn) : [m/1 o/1 v/4 n/7 b/1 e/5 I/7]

      +
      +
      +
      revenge

      Remember people who deop/kick/ban the bot, valid ops, or friends +and punish them? Users with the +f flag are exempt from revenge.

      +
      +
      revengebot

      This is similar to to the ‘revenge’ option, but it only triggers +if a bot gets deopped, kicked or banned.

      +
      +
      autovoice

      Voice users with the +v flag when they join the channel?

      +
      +
      secret

      Prevent this channel from being listed on the botnet?

      +
      +
      shared

      Share channel-related user info for this channel?

      +
      +
      cycle

      Cycle the channel when it has no ops?

      +
      +
      dontkickops

      Do you want the bot not to be able to kick users who have the +o flag, letting them kick-flood for instance to protect the channel -against clone attacks?

      -
      inactive
      -
      This prevents the bot from joining the channel (or makes it leave the +against clone attacks?

      +
      +
      inactive

      This prevents the bot from joining the channel (or makes it leave the channel if it is already there). It can be useful to make the bot leave a channel without losing its settings, channel-specific user flags, -channel bans, and without affecting sharing.

      -
      seen
      -
      Respond to seen requests in the channel? The seen module must be -loaded for this to work.
      -
      nodesynch
      -
      Allow non-ops to perform channel modes? This can stop the bot from +channel bans, and without affecting sharing.

      +
      +
      seen

      Respond to seen requests in the channel? The seen module must be +loaded for this to work.

      +
      +
      nodesynch

      Allow non-ops to perform channel modes? This can stop the bot from fighting with services such as ChanServ, or from kicking IRCops when -setting channel modes without having ops.

      -
      static
      -
      Allow only permanent owners to remove the channel?
      +setting channel modes without having ops.

      +
      +
      static

      Allow only permanent owners to remove the channel?

      +
      @@ -475,9 +450,8 @@

      Search

      set default-ban-time 120

      set default-exempt-time 60

      set default-invite-time 60

      -
      -
      set default-chanset {
      -
      +
      +
      set default-chanset {
      -autoop
      -autovoice
      -bitch
      @@ -510,11 +484,12 @@

      Search

      }

      -

      Copyright (C) 2000 - 2022 Eggheads Development Team

      +

      Copyright (C) 2000 - 2023 Eggheads Development Team

      - + +
      @@ -539,9 +514,9 @@

      Search

      diff --git a/doc/html/modules/mod/compress.html b/doc/html/modules/mod/compress.html index 55b0f5e18..c5b4b2d30 100644 --- a/doc/html/modules/mod/compress.html +++ b/doc/html/modules/mod/compress.html @@ -1,28 +1,23 @@ - + - + - - + + + Compress Module — Eggdrop 1.9.4 documentation - - - - - - - + + + + +
      - -
      -

      Partyline usage

      -
      -

      .files

      + +
      +

      Partyline usage

      +
      +

      .files

      -
      Moves you into the file transfer sub-system, if it has been enabled on this +

      Moves you into the file transfer sub-system, if it has been enabled on this bot. From there you can browse through the files online and use dcc file -transfers to download and upload.

      -
      -
      -

      .cancel <file> [file] …

      +transfers to download and upload.

      +
      + +
      +

      .cancel <file> [file] …

      -
      Tells the bot to stop sending a file that is pending (either -queued, waiting, or in the process of being transferred).
      -
      -
      -

      .cd <directory>

      +

      Tells the bot to stop sending a file that is pending (either +queued, waiting, or in the process of being transferred).

      +
      + +
      +

      .cd <directory>

      -
      Changes your current directory if possible. this works exactly -like the unix command.
      -
      -
      -

      .cp <source> <dst>

      +

      Changes your current directory if possible. this works exactly +like the unix command.

      +
      + +
      +

      .cp <source> <dst>

      -
      Copies a file or group of files from one place to another.
      -
      -
      -

      .desc <file> <description>

      +

      Copies a file or group of files from one place to another.

      +
      + +
      +

      .desc <file> <description>

      Changes the description for a file. if you are a master or file janitor, you can change the description for any file. @@ -198,20 +199,22 @@

      .desc <file> <description> -

      .filestats <user> [clear]

      +

      +
      +

      .filestats <user> [clear]

      -
      Reports on the users upload & download statistics. Optional argument -‘clear’ clears a users upload and download statistics.
      -
      -
      -

      .stats

      +

      Reports on the users upload & download statistics. Optional argument +‘clear’ clears a users upload and download statistics.

      +
      + +
      +

      .stats

      -
      Clears a users upload & download statistics.
      -
      -
      -

      .get <filename> [nickname]

      +

      Clears a users upload & download statistics.

      +
      + +
      +

      .get <filename> [nickname]

      Sends you the file(s) requested, over IRC. you should get a DCC SEND notice on IRC, and have your client accept it. if @@ -226,15 +229,16 @@

      .get <filename> [nickname] -

      .hide <file> [files] …

      +

      +
      +

      .hide <file> [files] …

      -
      Marks a file as hidden, so that normal users can’t see it. -Only a master or file janitor using %b’lsa’%b can see hidden files.
      -
      -
      -

      .ln <bot:filepath> <localfile>

      +

      Marks a file as hidden, so that normal users can’t see it. +Only a master or file janitor using %b’lsa’%b can see hidden files.

      +
      + +
      +

      .ln <bot:filepath> <localfile>

      Creates a link to a file on another bot. The filepath has to be complete, like ‘/gifs/uglyman.gif’. If the bot is not @@ -243,103 +247,116 @@

      .ln <bot:filepath> <localfile> -

      .ls [filemask]

      +

      +
      +

      .ls [filemask]

      -
      Displays the files in the current directory. Subdirectories +

      Displays the files in the current directory. Subdirectories are shown with “<DIR>” next to them, and other files will display their size (typically in kilobytes), who uploaded them (and when), and how many times each file has been downloaded. If a description of the file exists, it is displayed below the filename. You can -restrict the file listing by specifying a mask, just like in unix.

      -
      -
      -

      .mkdir <dir> [flags [channel]]

      +restrict the file listing by specifying a mask, just like in unix.

      +
      + +
      +

      .mkdir <dir> [flags [channel]]

      -
      Creates a subdirectory from this one, with the given name. If +

      Creates a subdirectory from this one, with the given name. If flags are specified, then those flags are required to enter or even see the directory. You can even specify a channel that the flags are matched against. You can use the %b’mkdir’%b command again -to alter or remove those flags.

      - -
      -

      .mv <source> <dest>

      +to alter or remove those flags.

      +
      +
      +
      +

      .mv <source> <dest>

      -
      Moves a file or group of files from one place to another (it -can also be used to rename files).
      - -
      -

      .pending

      +

      Moves a file or group of files from one place to another (it +can also be used to rename files).

      +
      +
      +
      +

      .pending

      -
      Gives you a listing of every file you’ve requested which is +

      Gives you a listing of every file you’ve requested which is still waiting, queued, or in the process of transferring. It shows you the nickname on IRC that the file is being sent to, and, if the transfer is in progress, tells you how far -along the transfer is.

      - -
      -

      .pwd

      +along the transfer is.

      +
      +
      +
      +

      .pwd

      -
      Tells you what your current directory is.
      - -
      -

      .quit

      +

      Tells you what your current directory is.

      +
      +
      +
      +

      .quit

      -
      Exits the file system.
      - -
      -

      rm <file> [files] …

      +

      Exits the file system.

      +
      +
      +
      +

      rm <file> [files] …

      -
      Erase a file for good.
      - -
      -

      .rmdir <dir>

      +

      Erase a file for good.

      +
      +
      +
      +

      .rmdir <dir>

      -
      Removes an existing directory, if there are no files in it.
      - -
      -

      .share <file> [files] …

      +

      Removes an existing directory, if there are no files in it.

      +
      +
      +
      +

      .share <file> [files] …

      -
      Marks a file as shared. This means that other bots can get +

      Marks a file as shared. This means that other bots can get the file remotely for users on their file systems. By default, -files are marked as unshared.

      - -
      -

      .optimize

      +files are marked as unshared.

      +
      +
      +
      +

      .optimize

      -
      Cleans up the current directory’s database. If you have a large +

      Cleans up the current directory’s database. If you have a large directory with many files you may want to use this command if you experience slow-downs/delays over time. Normally, the db -should clean up itself though.

      - -
      -

      .unhide

      +should clean up itself though.

      +
      +
      +
      +

      .unhide

      -
      Makes a file be not hidden any more.
      - -
      -

      .unshare <file> [file] …

      +

      Makes a file be not hidden any more.

      +
      +
      +
      +

      .unshare <file> [file] …

      -
      Removes the shared tag from a file.
      - -
      -

      .filesys module

      +

      Removes the shared tag from a file.

      +
      +
      +
      +

      .filesys module

      This module provides an area within the bot where users can store and manage files. With this module, the bot is usable as a file server.

      The following commands are provided by the filesys module:

      -
      -
      For filesystem users:
      -
      files
      +
      +
      For filesystem users:

      files

      +
      -

      Copyright (C) 2000 - 2022 Eggheads Development Team

      - - - +

      Copyright (C) 2000 - 2023 Eggheads Development Team

      +
      + + +
      @@ -364,9 +381,9 @@

      .filesys module
      diff --git a/doc/html/modules/mod/ident.html b/doc/html/modules/mod/ident.html index 0fb9cf6a6..59c0266a9 100644 --- a/doc/html/modules/mod/ident.html +++ b/doc/html/modules/mod/ident.html @@ -1,28 +1,23 @@ - + - + - - + + + Ident Module — Eggdrop 1.9.4 documentation - - - - - - - + + + + + diff --git a/doc/html/modules/twitch.html b/doc/html/modules/twitch.html index f8dfb3c13..bc21cddcf 100644 --- a/doc/html/modules/twitch.html +++ b/doc/html/modules/twitch.html @@ -163,7 +163,7 @@

      Partyline commandsSearch

      loadmodule uptime
       
      -

      Copyright (C) 2001 - 2022 Eggheads Development Team

      +

      Copyright (C) 2001 - 2023 Eggheads Development Team

      diff --git a/doc/html/modules/woobie.html b/doc/html/modules/woobie.html index 1076d3c2b..02f5b6c8b 100644 --- a/doc/html/modules/woobie.html +++ b/doc/html/modules/woobie.html @@ -125,7 +125,7 @@

      Search

      loadmodule woobie
       
      -

      Copyright (C) 2000 - 2022 Eggheads Development Team

      +

      Copyright (C) 2000 - 2023 Eggheads Development Team

      diff --git a/doc/html/modules/writing.html b/doc/html/modules/writing.html index 4cd607b43..8eb8cb6ad 100644 --- a/doc/html/modules/writing.html +++ b/doc/html/modules/writing.html @@ -1,34 +1,29 @@ - + - + - - - Writing an Eggdrop Module — Eggdrop 1.9.4 documentation - - - - - - - + + + + How to Write an Eggdrop Module — Eggdrop 1.9.4 documentation + + + + + - +
      @@ -417,7 +413,7 @@

      What to do with a module? previous | - next
      @@ -427,9 +423,9 @@

      What to do with a module?

      diff --git a/doc/html/objects.inv b/doc/html/objects.inv index 3eeec3c4f2f64ba7cdec65c523bdfc5395e4a612..7703dd2ccaddb86169d3a44b8031aed2182828a4 100644 GIT binary patch delta 1288 zcmV+j1^4==3iAq(e1A=E+c*%t`&ST1kM$bu0()2#1@ego+Y~{aqK9Hp&=hS8kx7B1 z;`rb1@SBuI&R!C0-n=K08a@u`Mh<30?O&oz^LHZ|S$-fihyU1{Lq{%M#_ev`DA_MO z-0>alrYslstShNnu_G~Y*lrh8Ye=@Fj&68oX$RR19oH-PzkhPDBVW8DmoE3g!HZ2N zkK0!7=eaQ>(yt;TD6l;hf_HjeA!bB{>&S=-^3W@;&nbkAq!1ZNL1@|Wa{?|Q^L>7# z8`huU0-A_V*N>6ah%+MwFmi6bts`aI0)9F}3ki{W7xDvr$3-g|{#x^6)ECFS{kdox zF3kLE92{SA?|*W`E3$s5zCt?G>3c#2kv$hg%Rw{je!qWYRK{ zuvw`ydlSI)C14@LcQ{Z3+r}7G69)~tE5o`aY>5LEO@AttO!x%btLgY>@@d=Ao&HRI zg$?-c0^WxdP=8uRz%Py;Lnx&<)>g1?Xn0dD?iefSnk2@tHT$#}nKP=i3aBbB4`?eD zOth7vkTF~d8vJJ>6~J2V3SI$X0b5L*5|gTJv^G)9F6T5VJDr#*W}9J- zrP5v}=6{O#=)6$2*|EuvEp=8S+HGaFBX6A}N82q;7xC9QdTGC7^PTwToJcm;+FD1O zewH5mpmKu(7t-+A2{_Qxzqvd_px-<<+mCY!9`zEBSO47HeZ(|0xAu=KSj_X+HVb8| z7p~^{7L5un6VupJHCu-c3<@p}5ip7hy`3LM#DBfaQ_RMcz~9*HhWBVt@tKIm(3|!! zJ0Fk6lgniy8b>KN?W~4Jy~aYlbp3Gi~`i#?@DmLnYeJqxt!yoC6FH-5FV@$;lBP`3m zD1Z4GUMhOWEXzKZI!;Z+Zkc7dS0#>et0D*bxXjI9;IaXSBv_-;Ml;p+mGPkop~ylx z6&12}@I=+{UY`@ScsiR7@bT_!n5=EQ5c3nmg*-MI7`dXlW#jtIB+bpx<9ZH?#bKP> zk3RJ{InQ+Zj7mg9dm`w@^^H$o*PzM<7=P!9NRef;(coV*TaEpemDv;qgK`Ut0d8$F zzU!on$w8RvOVvndjr8gl!}553V* zKpMdfBH`lkmh5uuhVWI`kgu(<0}3Kc)(1$A*4^T@%?lqn4q(fv85Bom5s_NsE`LM= zz3pHAno?~v9Q}_LANpP@6Df+l{E2XEIQ0uQqhj?`nG@6$GSLKuqiN5<-ymdHi6{E# zU@OAGP3_O}t`jnxRkzTuBkY95vS;el+opc?h3b9&K;<=ODl@qRrNw??-Y6^*rTD8^ z>S2S(1SG5iJlQ6YtcQ&@E$mbnR(}%duwldo+-}->@r`QPGe&XouvwZHDj3|6p4vXW z$8Fr@8`GaAjaI>Le{3-vf`6Qhl^shU4sc2#Lvi8IoVX0T*Y51yb8&3DhEdh%|9g#n ya1{ra888pHpMgSdYEa)Q+8UtOjZNrUeisMBM5F9%F2chy5Z-8X{sT1dCjoH?WO&d3 delta 1211 zcmV;s1VsDu3a1K?e1F@H+cpq=_g4r=ALANLfj$&LfW4xNW`jlSAP+?m&=hSGE0Y3A z+3UaW@G4RoI(^y8oH<7%HFG#3TRE5&u|FGa+CN)Ko8@l}8NEgM^XK6>-4jt1g_RWdB_7 zmI+gTjDzDto_}0!c*Lk5sxOlcb^5*`qLDoljh2I=taPl|{nBD{&WOxrpVxVn|Q6+KEpt~}(TS7}5iGOHQsf>h=&|YoFJ~bbA9og$o z%|D?5|6RcIkOJy2%Lw?x@oNaB6xYfH?S_`M`Qc8noUWV1ICFDIhcR*{l~w>n#f=Nv zNd+6_QY>cnhDnv)S2`c&aW##?17{A1d0kDZ@WPoBVxCu3$~|%Bh=}>sg+_0jI^)y_ zs~XWG3x9{47-Eeay)t)7#1w1v+%u<+IWxVQ$mocrA5J>8N)Jt3v~Y$CX;^gw4)pXd zE)Nmtx3BH)LruY>UgG8U@B7COn1*K7vvCEBdH&jFp=@5 zxI9F_C?fQ(zKn=_nN7^bl)#i|wc$M)RD33)F@N-iAFKQEXuNJ*CZchca?7h49`zdE zeda{tthkw6c@rqGLmu4SrK>K++C=ZCu{zezn};`c?2V2B(gUm`OJk~P!OTAH0v>1PG@&EFTCWqfE^=dPz>2cL`sdv5Dj$RpZ=Ir zZ8Ti7FBTvAUMdqQik^N)I5wQ_W}8v4dZNq)Y6{tCg2FX$U|>fOvZurneR7Fp;eT)) z+duP99A{_q9c$6nisEJ!}z~ zfP_N*@DZ`$eR_^-+~rTU zKTn#Rf^UE9FdTxvoDs{XgFqbMQZzx9;=*ANa2dAO9_`23;>^3264mPe` + - + - - + + Search — Eggdrop 1.9.4 documentation - - + + - - - - - - + + + + + - - - +
      @@ -260,9 +254,9 @@

      Writing an Eggdrop Script

      @@ -270,4 +264,4 @@

      Writing an Eggdrop Script + - + - - + + + Common First Steps — Eggdrop 1.9.4 documentation - - - - - - - + + + + + @@ -309,9 +303,9 @@

      Setting up SASL authentication
      diff --git a/doc/html/tutorials/module.html b/doc/html/tutorials/module.html index b750801ea..53d400935 100644 --- a/doc/html/tutorials/module.html +++ b/doc/html/tutorials/module.html @@ -1,28 +1,23 @@ - + - + - - - Writing an Eggdrop Module — Eggdrop 1.9.4 documentation - - - - - - - + + + + Writing a Basic Eggdrop Module — Eggdrop 1.9.4 documentation + + + + +