{"id":17797884,"url":"https://github.com/ticklemynausea/mbot","last_synced_at":"2025-03-17T04:32:43.762Z","repository":{"id":9336715,"uuid":"11184293","full_name":"ticklemynausea/mbot","owner":"ticklemynausea","description":"Fork of mirage's IRC bot","archived":false,"fork":false,"pushed_at":"2018-06-27T21:44:24.000Z","size":316,"stargazers_count":4,"open_issues_count":1,"forks_count":3,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-27T18:02:49.869Z","etag":null,"topics":["c-plus-plus","irc","irc-bot","irc-client","mbot"],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ticklemynausea.png","metadata":{"files":{"readme":"README","changelog":"ChangeLog","contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-07-04T18:41:21.000Z","updated_at":"2018-08-11T13:21:54.000Z","dependencies_parsed_at":"2022-09-10T20:22:49.127Z","dependency_job_id":null,"html_url":"https://github.com/ticklemynausea/mbot","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ticklemynausea%2Fmbot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ticklemynausea%2Fmbot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ticklemynausea%2Fmbot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ticklemynausea%2Fmbot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ticklemynausea","download_url":"https://codeload.github.com/ticklemynausea/mbot/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243841984,"owners_count":20356583,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c-plus-plus","irc","irc-bot","irc-client","mbot"],"created_at":"2024-10-27T11:58:07.982Z","updated_at":"2025-03-17T04:32:43.356Z","avatar_url":"https://github.com/ticklemynausea.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"MBOT README\n\n       \u003e\u003e\u003e\u003e\u003e\u003e        mbot - mirage's (irc) bot         \u003c\u003c\u003c\u003c\u003c\u003c\u003c\u003c\n\n    Copyright (C) 1998-2004  Tiago Sousa \u003cmirage@kaotik.org\u003e\n\n    This program is free software; you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation; either version 2 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program; if not, write to the Free Software\n    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\n\n  If you find bugs, improve something or just want to give ideas, contact me\nthrough email or talk to mirage on IRC networks PTlink.net or PTnet.org. :)\nThe latest version can always be found at:\n\n    http://darksun.com.pt/mbot/\n\n----------------------------------------------------------------------------\n\n0. TABLE OF CONTENTS\n\n1. History\n2. Description\n3. What about eggdrop?\n4. Commands\n5. Files\n6. Users\n7. Logs\n8. Core\n9. Modules\n9.1. Alice\n9.2. Calc\n9.3. Chanstat\n9.4. Extra\n9.5. Flood\n9.6. Getnick\n9.7. Invite\n9.8. Ircop\n9.9. Joinmsg\n9.10. Log\n9.11. Seen\n9.12. Watch\n9.13. Web\n9.14. Whois\n9.15. Word\n9.16. TCL\n10. Thanks\n\n----------------------------------------------------------------------------\n\n1. HISTORY\n\n  It all started with the uncontroled lame wish to have my nick on IRC, 24h ;)\nThe problem was that the shells I had at the time didn't run bitchx nor\neggdrop, so I had to look for an alternative...\n  At the same time, I wanted to start coding in C with Linux, I had done small\nprograms and wanted to do something more serious. So the project began, about\nMay 1998, far from thinking it would get this big.\n\n----------------------------------------------------------------------------\n\n2. DESCRIPTION\n\n  It's an IRC bot coded in C++, being started in C. Its main advantage is that\nseveral bots can run simultaneously in the same process, making it ideal for\nshells where the background processes are limited, but not the connections.\nIt also spares lots of resources this way, compared to running many instances\nof mbot.\n\nOther caracteristics:\n - IPv6 networking support\n - Partial TCL scripting compatibility with eggdrop\n - All the standard irc commands are available\n - Can be in many channels\n - Flood protection\n - Database, dictionary-like\n - DCC Send, easily accessible and configurable\n - DCC Chat with partyline\n - Different access levels, defined with a userlist\n - Recognize and use irc services (NickServ/ChanServ)\n - Log channels and privates\n - Can send logs to an email, when they are renewed\n - Extensions done with dynamic libraries in C++, to which I've called\n   modules, and can be added/removed while the bot is running\n - Conversations with an Artificial Intelligence module (based on C-Alice)\n - Watch nicks and log when they are on IRC\n - Lots of other stuff, check the available modules :)\n\n----------------------------------------------------------------------------\n\n3. WHAT ABOUT EGGDROP?\n\n  Eggdrop is the standard bot, but I've never liked it. Much less now. =)\n\nPros:\n - Easy scripts with TCL.\n(which in mbot must be coded in C++, making it harder in many aspects)\n - Botnet.\n(i don't really understand the \"usefulness\" of it)\n - Lots of ready-to-use scripts which do almost everything.\n(whatever it is, can also be done with mbot, it just has to be coded)\n - No knowledge of C/C++ required.\n(same with mbot, unless you want to add something)\n - Fine-grained user levels\n(overly complicated, in my opinion - i much prefer mbot's system)\n - More things, yes.. for some reason it's the most popular bot...\n\nCons:\n - Only supports one bot per process\n(mbot supports as many bots as the resources you have allow.)\n - More complex\n(mbot's configuration and usage is far less complicated)\n - Slower and memory-hungry\n(in mbot the scripts are hardcoded, so it's faster and smaller than any TCL,\nand you need a separate process for each bot)\n - You need to get scripts for anything you want your bot to do\n(mbot already comes with modules that respond to the most common needs)\n\n----------------------------------------------------------------------------\n\n4. COMMANDS\n\n  Commands are distributed through user levels and can be executed in privmsg\nor DCC Chat.\n\n  Note that many commands are defined in modules only. For example, to use the\n!seen, you need the seen module. Read section 8 of the README for the list,\nwith a short description, of mbot's core commands (those which aren't in a\nmodule), and section 9 for the modules.\n\n  Some commands have \"[]\" or \"|\" in their sintax. [] means that the parameter\nis optional. For example, in \"!op nick [#channel]\", if you execute \"!op nick\"\ninside a channel, the bot will op nick in that channel. If you execute it\nin pvt with the bot, it is necessary to specify a channel, even if the bot is\nonly in one channel. The \"|\", as in \"!setmsg msg | \u003cnone\u003e\", means that only\none of those two parameters is to be used, in this case, \"msg\" or \"\u003cnone\u003e\".\n\n----------------------------------------------------------------------------\n\n5. FILES\n\n  The bot uses several files for configuration and internal use, most of them\noptional, depending on the modules used.\n\nWARNING: \nFiles must *not* be changed while the bot is running, FOR THEY MAY GET\nTRASHED! Turn off the bot or the corresponding module first.\nTo those who'll use multiple bots/processes: YOU CAN'T USE THE SAME FILE IN\nMULTIPLE PLACES!\n\nActually, these rules apply only to files that are to be written on, such as\nlogs, .user, .word, etc. Others like the .get or .motd are ok, but I prefer to\nwarn about all of them, so that later on you don't come whining to me... ;)\n\nThe only file which *must* exist is the main configuration one. It has the\nfollowing general structure:\n\n\u003cglobal options\u003e\nbot\n\u003cthis bot's configuration\u003e\nbot\n\u003cthis other bot's configuration\u003e\n(...etc...)\n\n  The \"global options\" are mainly the modules to be used and log creation.\nAlthough they are present for all bots, each bot has its own configuration\ninside them. For example, you may use the word module, and only declare a\n\"word file.word\" in one bot, so only *that* bot uses it, not the others.\n  Each \"bot\" section is a bot, fully independant from the others, with its\nown options. They are all documented in example.conf. The example only\ncreates one bot, but you can add others, for example, by copying to the end\nof the file the info from the first bot and making the necessary changes, such\nas nick and data files used. Backup your configuration and give it a try.\n\n----------------------------------------------------------------------------\n\n6. USERS\n\n  The registered users are distributed in levels, which go from -1 to 10.\nRegistered users, while not identified with the bot, have the ficticious level\n1 (with the exception of the -1 level users). The others have level 0.\n\n  There are two ways to identify: the !pass command and with !chat, which\nopens a DCC Chat, and asks for the password.\n\n  Sometimes the \"identified\" attribute seems to be lost unexplainably. That's\nbecause of some ircd's protection, not showing real ips when you're not op or\nyou're not in the same channel, which may confuse the bot's authentication\nsystem. In any case, just identify again.\n\n  Level -1 has a special property: besides denying access to all commands,\nusers with that level are automatically banned from the channel when the bot\nsees them (shitlist).\n\n----------------------------------------------------------------------------\n\n7. LOGS\n\n  The logging system is made of two components: one is the main system log\nfile, which is defined by the \"botlog\" global configuration option. If the bot\ncrashes, doesn't show up on irc, or there's a problem of some sort - that's\nthe place to look into.\n\n  The other component is a much more user-definable system, perhaps a bit\ncomplicated at first sight. It's configurable via \"logcreate\" and \"logmail\"\noptions. The idea is, you create a sort of logging facility, with a referring\nhandle, defining caracteristics such as file to log to, timestamp mode, flush\nmode and rotation mode, and later in the configuration file you can have\nmodules using them. Rotating logs are renewed at 6 a.m. everyday by default,\nyou can change that in inc/Log.h if you really want.\n\n  Let's see a configuration example snippet of this:\n\nmodule mod/log.so\nlogcreate mychannel 1 0 mychannel.log mychannel.old.log\nlogcreate pvt 1 1 pvt.log\nbot\nlog mychannel #mychannel\nlog pvt \u003cprivmsg\u003e\n\n  What does that do? First, it creates a logging handle called \"mychannel\",\nusing mychannel.log (which rotates to mychannel.old.log) as the log file,\nalways flushed, and time-only timestamp mode (see example.conf to more details\non the options). Then another one called \"pvt\", that writes to pvt.log and\ndoesn't rotate.\n  Afterwards, they are used by the log.so module (loaded previously) to log\nall events of #mychannel to the loghandle \"mychannel\", which you defined\nbefore, and all private msgs with the bot to the log with the handle \"pvt\".\n\n  My purpose with this is to be able to log several things into the same\nlog file, such as pvt's with the same nick, but on different servers (remember\nthat mbot is capable of having several bots living simultaneously in the same\nprocess). Of course, you can create as many of those logging facilities as you\nlike and send whatever you want to them. For example, the log, watch and\nalice modules use them.\n\n----------------------------------------------------------------------------\n\n8. Core\n\n  These are the commands which are present in mbot's core, in other words,\nthey are built-in and don't require any module.\n\n!modlist\nList all loaded modules.\n\n!modadd path\nLoad the module at the given \u003cpath\u003e.\n\n!moddel name\nUnload the module with \u003cname\u003e, this must be a name returned by !modlist.\n\n!quit [msg]\nMake all bots in the current process quit with \u003cmsg\u003e, else uses the default.\n\n!set option [value]\nIf \u003cvalue\u003e is specified, sets \u003coption\u003e to it. Otherwise just show the content\nof \u003coption\u003e. The available options (variables) depend on the modules loaded,\nrefer to their documentation for further help (note that some options are\npart of the main code too).\n\n!loadconf [filename]\nReload the current configuration file or use \u003cfilename\u003e. Note that the changes\nonly take effect after reloading the module(s). USE WITH CARE, in particular,\ndon't change the bots' order (if multiple bots are defined of course).\n\n!away [msg]\nPut the bot away with \u003cmsg\u003e, or without parameters, remove the away.\n\n!nick nick\nChange the bot's nick to \u003cnick\u003e.\n\n!unbind !command\nDisable the given \u003c!command\u003e. Note that it can only be recovered by restarting\nthe bot or reloading that command's module.\n\n!cmdlevel !command level\nSet \u003c!command\u003e's required userlevel to \u003clevel\u003e.\n\n!join #channel\nAdd \u003c#channel\u003e to the channel list.\n\n!part #channel\nRemove \u003c#channel\u003e from the channel list.\n\n!status\nShow some bot status.\n\n!topic [#channel] text\nChange the topic in the current or in the specified \u003c#channel\u003e, to \u003ctext\u003e.\n\n!opme\nGive op to who executed the command. Can only be used inside a channel.\n\n!op nick [#channel]\nGive op to \u003cnick\u003e on the specified \u003c#channel\u003e.\n\n!deop nick [#channel]\nTake op from \u003cnick\u003e on the specified \u003c#channel\u003e.\n\n!kick nick [#channel] [reason]\nKick \u003cnick\u003e on the specified \u003c#channel\u003e, with \u003creason\u003e.\n\n!ban nick | mask [#channel]\nBan \u003cnick\u003e or \u003cmask\u003e on the specified \u003c#channel\u003e.\n\n!unban nick | mask [#channel]\nUnban \u003cnick\u003e or \u003cmask\u003e on the specified \u003c#channel\u003e.\n\n!bk nick [#channel]\nDeop, ban and kick \u003cnick\u003e on the specified \u003c#channel\u003e.\n\n!invite nick [#channel]\nInvite \u003cnick\u003e to \u003c#channel\u003e.\n\n!voice nick [#channel]\nGive voice to \u003cnick\u003e on the specified \u003c#channel\u003e.\n\n!devoice nick [#channel]\nTake voice from \u003cnick\u003e on the specified \u003c#channel\u003e.\n\n!say [#channel | $nick] text\nSend \u003ctext\u003e to a \u003c#channel\u003e or \u003cnick\u003e.\n\n!help\nShow the command list, up to the level of who executed it.\n\n!dcckill dcc_index\nTerminate the DCC specified by \u003cdcc_index\u003e, use !dcclist to see the indexes.\n\n!dcclist\nShow the list of active DCCs (Chat and Send).\n\n!chat\nMake the bot start a DCC Chat with who executed it.\n\n!get [file]\nWithout parameters, show the files available through DCC Send, else requests\nthe specified \u003cfile\u003e.\n\n!randkick\nKick a random non-op user where the command is made.\n\n!time\nShow current time and date.\n\n!reverse text\nShow \u003ctext\u003e with the letters reversed.\n\n!cop nick [#channel]\nUse chanserv to op \u003cnick\u003e in the specified \u003c#channel\u003e.\n\n!cdeop nick [#channel]\nUse chanserv to deop \u003cnick\u003e in the specified \u003c#channel\u003e.\n\n!useradd mask level [msg]\nAdd a user with \u003cmask\u003e and \u003clevel\u003e. If \u003cmsg\u003e is not specified, turns off the\njoin msg. If \u003cmask\u003e already exists, overwrites the old one.\n\n!userdel mask\nDelete the user with \u003cmask\u003e.\n\n!userpass mask pass\nChange user's password with \u003cmask\u003e to \u003cpass\u003e.\n\n!usermsg mask msg | \u003cnone\u003e\nChange user's join msg with \u003cmask\u003e to \u003cmsg\u003e, or turns it off with \"\u003cnone\u003e\".\n\n!usermask mask newmask\nChange user's mask from \u003cmask\u003e to \u003cnewmask\u003e.\n\n!userlevel mask level\nChange user's access level with \u003cmask\u003e to \u003clevel\u003e.\n\n!id\nShow the currently identified users with the bot.\n\n!userlist\nShow the list of registered users in the bot.\n\n!setpass password\nChange to \u003cpassword\u003e the password of who executed it.\n\n!setmsg msg | \u003cnone\u003e\nChange the join msg of who executed it to \u003cmsg\u003e, or turn it off with \"\u003cnone\u003e\".\n\n!pass password\nAuthenticate with the bot. Cannot be used inside a channel.\n\n!level\nShow the access level of who executed it.\n\n----------------------------------------------------------------------------\n\n9. MODULES\n\n  Here are descriptions and usage of each module that comes with mbot.\n\n----------------------------------------------------------------------------\n\n9.1. ALICE\n\n  A very popular module of mbot is ALICE. It's a \"port\" of C-Alice (by Jacco\nBikker) to mbot, with many bugs fixed and security checks added. Still, it's\nnot as stable as i'd like. You can read all about ALICE at\nhttp://alicebot.org. Basically, it uses a pattern match / response strategy to\nsimulate a human conversation.\n\n  To get the module working, you need the data files that define ALICE's\nbehaviour. You can either get them from alicebot.org, or you can use the\nones i have at mbot's site (recommended, alice.tgz), then untar it in mbot's\ndirectory. I recommend mine because I included some tags to make ALICE\ninteract with the \"seen\" and \"word\" modules, and also did some fixes/cleanups.\n\nTo talk to the bot in a channel, use the bot's name as the first word of a\nline. In private, everything except !commands is interpreted by ALICE. You may\nwant to edit alice/log/localuser.txt and change it to your settings. If you\nchange any of the AIML files, you must delete alice/data/patterns.txt and\nalice/data/templates.txt, so mbot can rebuild them with your changes.\n\n  Error and conversation logging is done through mbot's own services, thus,\n\"errorfile\" and \"logfile\" in alice.ini are ignored.\n\n  I added 2 tags to ALICE, \u003cseen\u003e and \u003cword\u003e, which integrate the\nfunctionality of the \"!seen\" and \"??\" commands into aiml (see mbot.aiml).\n\n  A great deal of bugs from C-ALICE were fixed, but some still lurk around,\nparticulary those related to \u003csrai\u003e tags. You'll know what I mean when it\nhappens. ;)\n\n----------------------------------------------------------------------------\n\n9.2. CALC\n\n  This module implements a simple calculator machine for mbot. There's only\none command, \"!calc \u003cexpression\u003e\", where expression can use:\n\nbinary operators: +, -, *, /, %, ^, ** (same as ^), =\nfunctions: see struct funcs[] in mod/calc.cpp, those include most ANSI C math\nfunctions which only require one parameter (and some aliases), fact(), rand(),\nrad(), deg().\n\"ans\": a special constant that holds the last valid result\nconstants: see struct consts[] in mod/calc.cpp, descriptions are in portuguese.\nvariables: use \u003cname\u003e=\u003cexpression\u003e to define them, and use them wherever you\nwould put a constant.\n\n----------------------------------------------------------------------------\n\n9.3. CHANSTAT\n\n  This module creates a html file with status about a certain channel in\nwhich the bot is. Note that only one channel per server can be chosen. The\npage is by default refreshed each minute. The html design was taken from an\neggdrop script, but you can change it at will.\n\n  Just put this in the configuration file:\n\"chanstat #channel filename_html filename_stat number\"\n\n filename_html: the html to be created\n filename_stat: where the history stats are kept. THE FILENAME_STAT IS NOT\n   BEING USED YET! So don't worry about it. Just put there a valid name,\n   although it won't be used (yet).\n number: 1 or 0, depending on whether you want to show the users' address\n\t or not.\n\n  You can also set the time between stat refreshes with\n\"set chanstat_refresh \u003cnumber of seconds\u003e\"\nwhose default is 60.\n\n----------------------------------------------------------------------------\n\n9.4. EXTRA\n\n  This module adds some not-too-useful commands... !raw, !dccchat (NOT a real\nDCC Chat implementation), !ping, !scan and !host. Try them if you want to.\n\n  By default, when a shitlisted nick is kick/banned, some pings aren't sent to\nits host. Use this to turn that on:\n\nset extra_akickping 1\n\n----------------------------------------------------------------------------\n\n9.5. FLOOD\n\n  This module is the privmsg flood detector. It watches all channels in each\nserver and kicks/warns users if certain limits are reached. Note that it does\nnot bother users with level \u003e= 5. These are the configuration options:\n\n Number of equal msgs to be considered flood (0 to turn off):\nset flood_maxmsg \u003cnum\u003e\n\n  Number of msgs (may be different) with the same mask (0 to turn off):\nset flood_maxmask \u003cnum\u003e\n\n  Number of msgs beyond the 2 defined before, to kick. If not 0, sends in pvt\nthe flood_kickmsg when flood is detected. Default is 0.\nset flood_maxwarn \u003cnum\u003e\n\n  Reason of the flood warn/kick:\nset flood_kickmsg \u003ctext\u003e\n\n----------------------------------------------------------------------------\n\n9.6. GETNICK\n\n  This module attempts to register a specified nick, by repeatedly\nchanging the bot's nick into the desired nick, and sending a register command\nto the irc services. Assuming the nick is still registered, after a while\nour nick gets changed to something like \"Guest23456\" or \"_nick-\", etc,\ndepending on your irc network. If this happens, the bot changes to its desired\nnick again, and so it goes, ad infinitum, until the nick register has\ndropped. This shouldn't be used in a normal, \"production\" mbot sitting in a\nchannel. These are the configuration options:\n\n  Nick we want to register:\nset getnick_nick \u003cnick\u003e\n\n  Command to register the nick (depends on the irc network/services):\nset getnick_cmd nickserv register _dark\n\n----------------------------------------------------------------------------\n\n9.7. INVITE\n\n  This module adds the command \"invite\", which when executed in pvt with the\nbot, makes it invite you to a specified channel. Activate this with:\n\nset invite_channel \u003c#channel\u003e\n\n----------------------------------------------------------------------------\n\n9.8. IRCOP\n\n  This is a module which probably no one will ever use ;) because giving\noper status to a bot is very risky. Anyway, this only implements a !kill\ncommand. Use it by setting the oline's password (it uses the current nick's\noline):\n\nircop password\n\nin the configuration file.\n\n----------------------------------------------------------------------------\n\n9.9. JOINMSG\n\n  This module sends a file, line by line, to everyone that joins the specified\nchannel. Note that this module has NOTHING to do with each registered user's\njoin message. The file is sent to everyone, and since it's opened in readonly\nmode, it can be used in multiple bots.\n  To use, put this in the configuration file:\n\njoinmsg \u003c#channel\u003e \u003cfilename\u003e\n\n----------------------------------------------------------------------------\n\n9.10. LOG\n\n  This module logs channels and/or privmsgs from certain nicks to the bot.\nIt uses a previously created loghandle to write to. You can choose whether\nto log the users' real IP or generate fake ones, useful when the channel\nlogs are online. This is specified on the 3rd parameter, with a \"1\" to log\nreal IPs or \"0\" to log fake ones.\n\nTo log a channel into \u003cloghandle\u003e, with fake IPs:\n\"log loghandle #channel 0\"\n\nTo log privmsgs from \u003cnick\u003e, with real IPs:\n\"log loghandle nick 1\"\n\nIf you want to log ALL privmsgs with the bot, with real IPs:\n\"log loghandle \u003cprivmsg\u003e 1\"\n\n----------------------------------------------------------------------------\n\n9.11. SEEN\n\n  This module manages the !seen command. Its purpose is to keep record of\nwhen a certain nick was last seen by the bot. To acomplish this, it looks for\nquit, part, kick, nick and join events and saves the nicks, along with a\ntimestamp, in the specified file. That file is NOT meant to be editable.\n  So that's the only configuration option to place in the .conf:\n\"seen somefile.seen\"\n  If this .seen file doesn't exist (which normally happens when the bot is\nbeing configured for the first time), it will be automaticaly created. Use a\ndifferent file for each bot/server because mbot uses them separatedly.\n\n----------------------------------------------------------------------------\n\n9.12. WATCH\n\n  This module is useful to track a nick's presence on irc, using the watch\ncommand that most ircds implement. It logs the login/logout time, ircname\nand irc server that the nick used. To set a watch on some nick, use:\n\n\"watch loghandle nick\"\n\nwhere \u003cloghandle\u003e is a logging facility created previously by logcreate, and\n\u003cnick\u003e is the nick you want to keep an eye on.\n\n----------------------------------------------------------------------------\n\n9.13. WEB\n\n  This module implements several commands that show some news sites'\nheadlines. Requires libxml to be installed.\n\nCommands:\n\n!freshmeat - freshmeat.net\n!gildot - gildot.org\n!bsdtoday - bsdtoday.com\n!useperl - use.perl.org\n!slashdot - slashdot.com\n!linuxtoday - linuxtoday.com\n!unsecurity - unsecurity.org\n!securityfocus - www.securityfocus.com\n\n----------------------------------------------------------------------------\n\n9.14. WHOIS\n\n  This module implements a frontend to the whois database, using the \"whois\"\nshell command commonly found in unixes. It has *nothing* to do with irc's\nwhois. You should try to use it in your shell to know what i'm talking\nabout, in case you're unaware of its informative potencial. I use\nwhois.ripe.net, which means it returns info about IPs, not domains.\n\n  If you have a whois program that only works with RIPE, you must set the\nvariable \"whois_ripe\" to 1, in the configuration file, like this:\n\n\"set whois_ripe 1\"\n\n----------------------------------------------------------------------------\n\n9.15. WORD\n\n  This module provides a dictionary-like database implementation. The\nkeywords are not case sensitive. There are 6 available commands, they are:\n\n!learn- word num\nDelete \u003cnum\u003e words from \u003cword\u003e's definition, starting from the end.\n\n!learn+ word text\nAdd \u003ctext\u003e to \u003cword\u003e's definition. If \u003cword\u003e doesn't exist, create it.\n\n!learn word [text]\nAdd or replace \u003cword\u003e with \u003ctext\u003e. If \u003ctext\u003e if not especified, delete \u003cword\u003e\ninstead (if it exists).\n\n!forget word\nDelete the especified \u003cword\u003e.\n\n!wordcount\nSay the number of words defined.\n\n?? word\nSearch \u003cword\u003e in the database and return its content.\n\n  The options to configure:\n\n\"word somefile.word\"\nwhich of course contains the database.\n\n\"wordnotice\"\nwhich makes the \"??\" queries to be answered with notices instead of privmsg.\n\n\"wordnotdef That word is not defined!\"\nis to change the default message when words not defined are asked for.\n\n\"wordlog loghandle\"\nuses log with \u003cloghandle\u003e to log succesful !learn commands\n\n----------------------------------------------------------------------------\n\n9.16. TCL\n\n  This module implements a subset of eggdrop's tcl functionality. However,\ndon't just blindly load eggdrop scripts and hope they'll work flawlessly.\nThere are differences in the way mbot and eggdrop works, especially when\nhandling users and their flags. And don't forget to see the bot's log,\nmissing tcl commands and errors are put in it. This module is still very\nincomplete, but many interesting scripts can already be used. Check the\nscripts/ directory for some examples. Each bot uses a separate tcl\ninterpreter, as one would expect from mbot.\n\n  To load a TCL script in the configuration file, use:\n\n\"tcl name.tcl\"\n\n  To load it when the bot is online, use the command:\n\n!tcl load name.tcl\n\n  To evaluate a given tcl expression, use the command:\n\n!tcl eval \u003cexpression\u003e\n\n  If you need to remove a given script, your best bet is to use \"!tcl eval\nunbind ...\" or simply \"!moddel tcl\" / \"!modadd mod/tcl.so\" (which will reset\nall tcls).\n\n  As you know, mbot uses levels instead of flags. Thus, I had to do some\nconversions. They are:\n \n        - -\u003e 0          h -\u003e -1\t\tc -\u003e 0\t\tv -\u003e 2\n        m -\u003e 9\t\to -\u003e 5\t\tp -\u003e 1\t\tq -\u003e -1\n        n -\u003e 10 \td -\u003e -1\t\tb -\u003e 10\t\tu -\u003e -1\n \tt -\u003e 10\t\tk -\u003e -1\t\tj -\u003e 9\t\ta -\u003e 5\n\n  Bindings implemented:\npub, dcc, msg, pubm, msgm, notc, join, part, sign, topc, kick, nick,\nctcp, ctcr, raw, chat\n\n  (Some) known bugs/limitations:\n- uses only * and ? match characters\n- doesn't support dcc chat channels\n- mbot ignores the return value of the proc in bind ctcp/ctcp/raw and always\n  does its internal processing\n- no botnet\n- dumpfile sends any file\n- chanlist ignores flags and sends all\n- in adduser, mask=handle!hostmask_user@hostmask_host, level=0\n- delhost always returns 0\n- dccputchan doesn't use the channel\n- dccdumpfile sends any request\n- resetchan does nothing\n- pushmode simply sends the modes, doesn't queue them\n- flushmode has the same problem as pushmode\n- dnslookup is not asynchronous (in fact nothing is done yet)\n- setudef isn't implemented because mbot doesn't use channel flags\n\n  You can find a (probably incomplete) list of unimplemented commands in\nthe beginning of mod/tcl.cpp.\n\n----------------------------------------------------------------------------\n\n10. THANKS\n\nAlthough the bot was programmed mainly by me, many people have been important\nthroughout the project:\n - Death-Angel, for all the conversations we had about the bot, and the\n   initial help on C.\n - Vladimir \u0026 korsh, for accepting the bot on #Evora even in its initial\n   phase, which gave me motivation to continue and improve.\n - bluud, for helping me administer DarkSun, especially when the user\n   registers began.\n - Netcyborg, for showing me how to declare variables of functions.\n - zerit0, for the cool mbot logo (no longer used though).\n - FB of ProActive Web Design (http://www.proactive.com.pt) for the site.\n - Hal9000, for allowing me to distribute his tcl scripts\n - Many others, for the ideas, suggestions and using mbot on their channels.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fticklemynausea%2Fmbot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fticklemynausea%2Fmbot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fticklemynausea%2Fmbot/lists"}