README for MoxQuizz ------------------- * This text corresponds to version 0.8.0 * - 0.8.x version are dedicated to Lefty - 0. Introduction 1. Quickstart 2. Detailed description 3. User commands 4. Commands to control the script 5. Configuration/Quiz features 6. Supplemental tools 6.1. setup.pl -- set some variables in provided config and moxtools 6.2. allstars.pl -- prettyprint the allstars table for MoxQuizz 7. Future thoughts (road map) 8. Contact 9. Credits 0. Introduction --------------- This is a (not so) short README for Moxons quiz/trivia script. MoxQuizz is a multilingual quiz/trivia script for the popular IRC bot eggdrop, acting as a game master playing a quiz. Normally, a question is posted to the channel and all chatter is searched for the answer. If something matches an answer or an optional regular expression, the user who said it receives a score. The high-score table will be printed regularly (see rankdelay in TCL file). When a player reaches a certain score, he wins the quiz and the rankings will be reseted. A score is recorded in the allstars table, too. You can use your own question files (they are always welcome to be included in future distributions). See README.database for a description of the file format. Currently sets for several languages are provides as well as language definitions for the messages MoxQuizz emmits. MoxQuizz was completely written from scratch. It requires eggdrop 1.6.8 or later together with TCL 8.3.2 or later. You can find an instance of MoxQuizz running in #quiz and #quiz.de on DALNet (since November 2000). The impatient read section 1 for the most important stuff. If you are not planning to run a script/bot for yourself, you can skip sections 4 to 6. If you want to control the script, read section 4. If you plan to install a script/bot for you own, read 5 and 6 as well as the INSTALL file. All configuration variables mentioned can be changed in the file moxquizz.rc See section 5 for more information about configuration and additional features like colors on/off, allstars computed monthly, etc. 1. Quickstart ------------- This section briefly tells, what you definitely must know before you start listed as separate items. You should have installed an eggdrop and have read INSTALL. - You need the flags P and Q to be able to control the game. - To start the game, simply start the eggdrop with the script loaded and say: !ask in your quiz channel. - Control the quiz from a dcc connection to the script/bot. - All control commands are prefixed with: .! - Safely shutdown the quiz (and the let the bot terminate) with: .!exit from within a dcc connection. - Pause a running game with .!pause and continue with .!cont 2. Detailed descripton ---------------------- This section needs to be written more thoroughly -- maybe this gets never done, since many things are rather technical and should not bother you if you are a normal user. Besides that it might be interessting. - Channel desert detection MoxQuizz detects if nobody is talking to the channel for a while and halts the quiz automatically. The time of silence is $useractivetime seconds and will be checked in the tip giving function. - Regular Expressions -- regexp MoxQuizz is able to match answers with a regular expression. This is a very powerful tool allowing you match a wide range of answers including alternatives, different orders (done with alternatives :), optional parts, common typos etc etc. Search for regexp with the search engine you like to get enlightened, you will love it. - Allstars table Allstars data is stored with username, so users playing with different nicks get several entries. The hostmask is stored, so that the list can be edited by hand. This might be replaced by something better. You can use allstars.pl to prettyprint the table as ASCII, HTML or XML. The formula taken for the allstars computation is: Points in game 1 Sum over: 10 * ------------------ * ------------------------ log10(your points) your duration in seconds By default the allstars table is computed for separately for each month. The script always serves only the current month. This can be changed (see optional features below). The duration is the time the player needed to win, i.e. the time between his/her first score and the end of the game. - Game state There are 5 game states: stop, halt, asked, waittoask and pause. Asked and waittoask will change mutually while a game is in progress and can temporary be left to pause (!pause) and then reentered with !cont. Halt and stop can be reached from everywhere. The difference among the last both is: from halt a new game can be started by users with !ask, whereas the stop state must be left explicit with !init or !halt (both change to state halt). - Bot exit The script stores the ranks and all asked userquestions to disc (see configuration section below for filenames) - Rehashing The script tries to survive rehashing. To achieve this, it writes the ranks to disc and reloads them after the rehash. Lofgiles are tried to be reopened, too. - Optional features The script has some features, which might or might not be enabled in your bot. Ask the botowner or check .!set from the partyline or read moxquizz.rc. I'll talk about the defaults here. Check section Configuration/Quiz Features for a detailed description. The script can give tips from time to time (every 30th question or so). Currently it talks about common commands and features af the script, like how to post userquestions, how to check allstars, etc etc. This feature proved to be useful, since it learns users the basic commands. The script has a command !rules which show the user the channel rules. If you installed the script/bot for yourself, you probably want to check moxquizz/quizdata/channelrules.txt. Some channels have sentinel bots, which +im a channel when danger is ahead. MoxQuizz detects this and automatically pauses (this feature is disabled by default). Let the game continue by -m your channel or .!cont from the partyline. - moxtools.tcl This is a set of tool functions not directly associated with the quiz operation. So far the following is included: Announce -- let the script announce a single message to each user joining a channel the script is on. Set the message with !announce as master. Antispam -- If there is a file intl/antispam.txt, MoxQuizz will send it to any user who says !antispam in the channel. This is meant to provide information about how to avoid spammers on IRC (which was a big problem on DALNet end of 2002). Bad words -- the script recognizes a small set of bad words and kicks of someone says them. If the person repeats swearing within a certain time he/she is banned for 30 minutes. Disabled by default. Identify -- bot users with flag P can let a MoxQuizz manually identify itself agains a nickserv by !identify on the partyline. This is because automatic identify doesn't always work correctly. Logfiles -- function which creates a logfile for each channel the script/bot joins. I did not like the fact, that all stuff is logged to a singe file not even tagged with the channel name. Nickserv -- The script is able to identify itself to nickserv. Specify hostmask and password. VHosts -- The script can automatically be set up for use a vhost. Currently this works for me and probably won't work for you (since I don't know how you get your vhost, please tell me!) Disabled by default. Jump -- Allows users with flag Q to let the bot jump to a specific server (or to next server in list): !jump or !jump <server> - Other channels The script/bot can join other channels, but the quiz can only take place in one channel at a time. Note that the fun commands are aviable in all channels, the script/bot is in (they are now documented in README.moxfun) - What MoxQuizz is not/cannot: . The game cannot run in more than one channel at a time (install another eggdrop if you want this). . Teamplay is planned since long, but still far ahead. One can only play for oneself. . MoxQuizz will not help your users if they get addicted to quiz. - Multilingual: Starting with version 0.8.0 MoxQuizz speaks several languages and comes with question databases in a wide range. Currently there are: Language Message set? Question set? english yes 5437 french yes - german yes 6524 greek yes - malaysian - 3444 norwegian - 566 3. User commands ---------------- Several commands can be invoked by the user besides solving a question by simply saying them on the channel: !allstars <n> - shows you the first n positions in the current allstars table. When ommitted, n defaults to 10. !ask - starts the quiz after is was halted/initialized or tells the user the actual question by /msg, if a question is open. !comment <txt> - comment bugs, typos and any other things you want to be said. If you refer to a question, make sure to mention it's number! !hi - Lets the script greet known ppl (bot users and ppl in the allstars table). !score <nick> - tells you <nick>s current scores. Without <nick> it will be you own scores. !rank <n> - shows you the first n positions in the current rank list. When ommitted, n defaults to 10. !revolt - can be used to show that a user dislikes a question. The script accepts revolts after at least one tip was given & solves automatically, if more than 50 percent of the people, who said something within the last 'useractivetime' seconds (default 4 minutes), revolt. !qhelp <topic> - same as !qhelp per msg. See below for a description !rules - same as !rules per msg. Lists the channel rules, if the script is configured with any. !version - reports version number and amount of known questions of MoxQuizz similiar to the on-join message. Additionally, there are commands which can be sent as a /msg to the bot to ask user questions and do other things: !userquest <question>::<answer>::<regexp> - ask a user question. Specify at least question and answer. Optional regexp is a TCL regexp to match. "::" separates the elements. You further can enclose a region in the answer with #...# to mark text for tip generation and answer match. Your nick can then use !usertip, !usersolve and !usercancel. Up to five questions will be scheduled, before a question is rejected. Example: !userquest Who is my author?::Moxon !usertip <tip> - immediately places a tip while in your userquest. Without <tip>, a default tip will be given. The <tip> will be inserted into the list of generated tips and stored, too. !usercancel - cancel a given userquestion or your question ahead !usersolve - solves your userquestion !qhelp <topic> - gives an help text on <topic> or an overview. !rules - same as public !rules. Lists the channel rules, if the script is configured with any. 4. Commands to control the script --------------------------------- The script is controlled by sending him commands via /msg and dcc. They are parted into commands which can be invoked by users known to the bot as quizmaster (flag P), quizadmin (flag Q) or bot master (flag m). Note the user commands must be invoked by msg, whereas those mentioned here must be invoked over a dcc chat session like this (exceptions are !nuq, !uq and !listnuq): .!tip or . !tip The "!" is there because of historical reasons and to avoid clashes with other dcc commands. Quizmasters can control the quiz like starting and giving tips, quizadmins can manipulate the rank list and move the quiz to other channels, the master can set certain system variables and let the bot join other channels to sit around and friends can let the bot talk on any channel it is on. The list following is ordered by function group, where each command is preceeded with the flag needed. Note, that you only have to send the command without the flag. # quiz running status P !halt - halt the script, and closes an open question (ranks are kept safe). Users can restart the quizz with !ask ! P !init - init the script. The game can be started with !ask P !reset - shortcut for sequence .!stop, .!rankreset, .!init P !stop - stop the script, and closes an open question (ranks are kept safe). Quiz can only go continued with !halt or !init. P !pause - pauses the actual game. A running game can be continued with !cont (NOTE: !ask will not continue here, but questions are kept open.) P !cont - continues a previously paused game. P !status - report the current status to you via /msg m !exit - causes the script to save all its data (rank and user questions), leave the current channel and quit. m !aftergame <act> - Specify what the script shall do after the current or next (if none open) game. Valid values are: halt, stop, exit, newgame. Except the last one all correspond to the !<act> command. newgame will just start a new game. Note that aftergame is only considered when the game is won or the channel is detected desert. This command is for automatic shutdown and stuff. # quiz configuration m !load - load configuration from $configfile m !save - save current configuration to $configfile m !set <key value>+ - set some values from the configuration file. This replaces !tipdelay, !askdelay, !tipdelay, !setwinscore and !restrict from 0.6.x and prior. Lists options and their value if no or a single argument is given, lists available keys if single argument matches more than one. # quiz control stuff like speaking and channel hopping P !say <txt> - let the bot say something. txt can start with #<chan> to talk to <chan>. Default is quizchannel. P !act <txt> - let the bot act in some way. txt can start with #<chan> to act in <chan>. Default is quizchannel. m !allsay <txt> m !allact <txt> - say <txt> or act <txt> on all active channels. Q !join <chan> - join a channel to sit around Q !part <chan> - part a channel Q !quizto <chan> - move quiz to <chan> (without leaving the channel) Q !quizleave - part current channel where the quiz is on. # question related stuff P !solve - solve current question P !tip <tip> - give a generated tip or the optional <tip>. If it is an optional tip, it will be inserted into the generated tip list. P !setscore <n> - sets the score for the current question to <n>. This will be noticed to the channel. P !skipuserquest - skip the next (not the current) user question m !qsave - save all user questions (in fact, they will be appended to their file, so that nothing gets lost). The internal list will be cleared, so that the file contains questions only once. Only questions already asked are saved, unless you specify 'all' as parameter. Q !reload <set> - reload the question files. Shows a list of avialbe sets without param. P !nuq <nick> - stops nick!*@* and *!ident@*.subdomain.domain from adding userquestions for the next 45 minutes P !uq - reverts this P !listnuq - lists all !nuq entries P !clearnuq - clears all !nuq entries # commands to manage players and rank P !allstars <n> - shows the first n allstar ranks. n defaults to 5. m !allstarssend - sends you the current alltars file by dcc, if module filesys was loaded m !allstarsload - reloads the allstars file. P !rank <n> - show the first n rankings. The rank-show timer will be reset. n defaults to 5. Q !rankdelete nick+ - remove all given nicks from the rankings (and userlist) m !rankload - replace ranks in memory with the ones saved to disk m !ranksave - save current rankings (in fact, it saves all known users) Q !rankreset - resets the rankings and clears the userlist Q !rankset <nick score>+ - sets all given nicks to the corresponding score, if they are known to the script. If not, no score will be set. Score can be one if -n, n and +n whether tosubsctract, set absolute or add score. # miscellaneous commands - !comment <txt> - same as public !comment command. Records txt as a comment. If you refer to questions, please mention it's number. 5. Configuration/Quiz features ------------------------------ Besides that you can tune the script by changing several variables, there are some features you can choose to enable/disable. There is no need to change the script itself, all changes you make are done in moxquizz.rc in the quiz directory. Files and directories (these are defined in the script itself, but you won't change them): quizbasedir moxquizz datadir $quizbasedir/quizdata configfile $quizbasedir/moxquizz.rc rankfile $datadir/rank.data allstarsfile $datadir/rankallstars.data userqfile $datadir/questions.user.new commentsfile $datadir/comments.txt channeltipfile $datadir/channeltips.txt channelrulesfile $datadir/channelrules.txt Configuration variables in moxquizz.rc: Things you sure wish to change: ------------------------------- channelrules = yes Print channel rules on !rules. Please visit the channelrulesfile (defaults to $datadir/channelrules.txt) and insert _your_ rules. (yes/no) questionset = en All files in datadir with this extension will be considered as question sets and will be loaded on quiz startup. quizchannel = #quiz Channel the script will join on server connect and make the quiz. language = en Besides having different sets of questions, the script speaks other languages than english. It comes with a german language set, more will be added. Features you might wish to enable/disable/change: ------------------------------------------------- channeltips = yes enable/disable channeltips -- small helptexts postet now and then. See or edit quizdata/channeltips.txt for the tips. (yes/no) colorize = yes shall the script use colors? (yes/no) monthly_allstars = yes compute allstars table per month (yes/no) msgwhisper = no If enabled, all information to users is given as PRIVMSG. If disabled, it is given by NOTICE. This affects all messages to users. pausemoderated = yes automatically pause if channel get moderated? Some protection scripts do that. (yes/no) userquestions = yes allow users to post questions on their own with /msg <BOT> !userquestion (see above) prices = yes Whenever a user wins a game, he will receive a trophy. Check intl/*/prices.txt for a list of them stripumlauts = no If you encounter problems with umlauts, enable this option. All umlauts will be converted to their transliteration (this feature might vanish in the future). Restriction Variables: ---------------------- lastwinner_restriction = 1 Stops answer bots and too elite ppl. After winning lastwinner_max_games the user is ignored for the next game. Can be controlled with !restrict win_rows. lastwinner_max_games = 2 Max number of games on is allowed to win in a row. overrun_protection = yes don't accept anwers from new players after overrunlimit points have been reached by at least one player (yes/no) Things which affect the gameplay and script behaviour (timers and such). You normally don't want to change these: -------------------------------------------------------------- Don't change things here too often, since some affect the allstars score calculation! maxranklines = 25 maximum number of rank or allstarslines which will ever be shown. Don't set this too high, since it blocks all other output by msg such as help and stuff. tipcycle = 5 number of automatic tips generated winscore = 40 score to win the game askdelay = 15 Delay in seconds between solution and next question. tipdelay = 30 Delay in seconds between tips. After the tip list is printed completely and another $tipdelay period, the question will be solved automatically. System features which you probably don't want to change: -------------------------------------------------------- userqbufferlength = 5 Number of user questions scheduled max quizloglevel = 1 Loglevel the script logs it's stuff to. useractivetime = 240 Seconds a user must have said something to be considered active (so he gets counted in !revolt code) 6. Supplemental tools --------------------- This section describes the supplemental tools found below the directory named supplemental. 6.1. setup.pl -- set some variables in provided config and moxtools ---- This perl script sets some variables mentioned in INSTALL for you. It should work with a modified config file (if you changed values), but probably will fail if you added a list of servers. Nevertheless, you can use it with the config files which come with MoxQuizz. 6.2. allstars.pl -- prettyprint the allstars table for MoxQuizz ---- To support your quizchannel, allstars.pl prettyprints your allstars file as a ASCII table or as a HTML table. Invoke with --help to get a list of commands and parameters. 7. Future thoughts ------------------ Here is a small roadmap: - team code - tipmode to mix generated and given tips - game styles, like most scores in 30 minutes and such 8. Contact ---------- You like this? You hate it? Tell me about! Author: Moxon AKA Sascha Lüdecke IRC: #quiz and #quiz.de on irc.dal.net EMail: moxon@meta-x.de WWW: http://www.meta-x.de/moxquizz 8. Credits ---------- Special thanks to (no order): - Michee <Michee@sonnet.de>, since artwork was done with heavy support of him, and he edited numerous questions. - Julika for constructive discussing a lot of issues and editing a large amount of questions, too. - Neo for making a lot of constructive critics. - all people on the quizchannels on (no longer existent) irc.sonnet.de for being patient when they encountered bugs, as well as all the people from #quiz and #quiz.de in DALNet. - Imran Ghory for providing more than 600 english questions. - ManInBlack for providing the VHost code for moxtools.tcl - Quake <quake@giga4u.de> for providing another 400 german questions - |casiotone| for editing _all_ english questions. What a huge amount of work done, thanks! - Stanstimer for editing lots of english userquestions and providing hundreds of own ones - Magic2000 for providing lots of english questions - Julia33 for providing an initial set of about 500 norwegian questions - BriZen for prodivind more norwegian questions - ^MaKaM^ <makam@adinet.com.uy> for providing 1048 spanish questions - "Gun@gnoo.org" <Gunslinger@ifrance.com> for the french translation - bibib <skaterz@cytanet.com.cy> for the greek translation - stuff^ for a plethora of new english questions Lots of others for providing questions, translations, suggestions, bugs and more. If you are not listed here, please mail me. ------------------------------------------------------------------------ $Id: README,v 1.48 2002/07/05 18:57:27 chat Exp $ ## Local Variables: ## mode: text ## End: