### # Copyright (c) 2010, quantumlemur # Copyright (c) 2011, Valentin Lorentz # Copyright (c) 2020, oddluck # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright notice, # this list of conditions, and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright notice, # this list of conditions, and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the author of this software nor the name of # contributors to this software may be used to endorse or promote products # derived from this software without specific prior written consent. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. ### import supybot.conf as conf import supybot.registry as registry from supybot.i18n import PluginInternationalization, internationalizeDocstring _ = PluginInternationalization('Jeopardy') def configure(advanced): # This will be called by supybot to configure this module. advanced is # a bool that specifies whether the user identified himself as an advanced # user or not. You should effect your configuration by manipulating the # registry as appropriate. from supybot.questions import expect, anything, something, yn conf.registerPlugin('Jeopardy', True) Jeopardy = conf.registerPlugin('Jeopardy') # This is where your configuration variables (if any) should go. For example: # conf.registerGlobalValue(Jeopardy, 'someConfigVariableName', # registry.Boolean(False, """Help for someConfigVariableName.""")) conf.registerChannelValue(Jeopardy, 'blankChar', registry.String('*', _("""The character used for a blank when displaying hints"""))) conf.registerChannelValue(Jeopardy, 'numHints', registry.PositiveInteger(3, _("""The number of hints to be given for each question"""))) conf.registerChannelValue(Jeopardy, 'timeReplies', registry.PositiveInteger(1, _("""The number of time remaining replies if showHints False and showTime True"""))) conf.registerChannelValue(Jeopardy, 'delay', registry.Integer(4, _("""The number of seconds to increase the delay between questions"""))) conf.registerChannelValue(Jeopardy, 'timeout', registry.Integer(90, _("""The number of seconds to allow for each question"""))) conf.registerChannelValue(Jeopardy, 'hintPercentage', registry.Probability(0.25, _("""The fraction of the answer that should be revealed with each hint"""))) conf.registerChannelValue(Jeopardy, 'hintReduction', registry.Probability(0.5, _("""The percentage by which to reduce points with each hint reveal"""))) conf.registerChannelValue(Jeopardy, 'flexibility', registry.Float(0.94, _("""The minimum similarity score of the answer checker. Uses jaro-winkler distance, 1.0 is identical/disabled. (Sane values > 0.90)"""))) conf.registerChannelValue(Jeopardy, 'inactiveShutoff', registry.Integer(5, _("""The number of questions that can go unanswered before the game stops automatically."""))) conf.registerGlobalValue(Jeopardy, 'jserviceUrl', registry.String('http://jservice.io', _("""Set an alternate URL where jservice can be accessed at, for example a locally run jservice instance."""))) conf.registerChannelValue(Jeopardy, 'defaultRoundLength', registry.PositiveInteger(10, _("""The default number of questions to be asked in a round."""))) conf.registerChannelValue(Jeopardy, 'randomize', registry.Boolean(True, _("""This will determine whether or not the bot will randomize the questions."""))) conf.registerChannelValue(Jeopardy, 'requireOps', registry.Boolean(False, _("""This will determine whether or not the user must be a channel operator to start/stop the game."""))) conf.registerChannelValue(Jeopardy, 'enabled', registry.Boolean(True, _("""This will determine whether or not the game is enabled for a given channel"""))) conf.registerChannelValue(Jeopardy, 'defaultPointValue', registry.PositiveInteger(500, _("""The default point value for questions if no point value is given"""))) conf.registerChannelValue(Jeopardy, 'autoRestart', registry.Boolean(False, _("""Start a new round of random questions after the current round has ended."""))) conf.registerChannelValue(Jeopardy, 'keepHistory', registry.Boolean(True, _("""Keep a history of previously asked questions per channel and don't repeat them."""))) conf.registerChannelValue(Jeopardy, 'useBold', registry.Boolean(True, _("""Use bold in replies."""))) conf.registerChannelValue(Jeopardy, 'showScores', registry.Boolean(True, _("""Show scores at the end of the round."""))) conf.registerChannelValue(Jeopardy, 'showBlank', registry.Boolean(True, _("""Show first (blank) hint with the question. Overrides showHints only for this reply."""))) conf.registerChannelValue(Jeopardy, 'showTime', registry.Boolean(True, _("""Show time remaining messages when not showing hints."""))) conf.registerChannelValue(Jeopardy, 'showHints', registry.Boolean(True, _("""Show hint messages automatically. Overrides showTime."""))) conf.registerGroup(Jeopardy, 'template') conf.registerChannelValue(Jeopardy.template, 'question', registry.String("#{{number}} of {{total}}: \x0313({{airdate}}) \x0309[${{points}}] \x0310\x1f{{category}}\x1f: {{clue}}", _("""The template used to render questions."""))) conf.registerGroup(Jeopardy.template, 'restart') conf.registerChannelValue(Jeopardy.template.restart, 'question', registry.String("\x0313({{airdate}}) \x0309[${{points}}] \x0310\x1f{{category}}\x1f: {{clue}}", _("""The template used to render questions when autoRestart is True."""))) conf.registerChannelValue(Jeopardy.template.restart, 'correct', registry.String("\x0313{{nick}}\x03 got it! The full answer was: {{answer}}. Points: \x0309{{points}}\x03 | Total: \x0309{{total}}", _("""The template used to render correct answer replies when autoRestart is True."""))) conf.registerChannelValue(Jeopardy.template, 'hint', registry.String("HINT: {{hint}}{% if time %} | ({{time}} seconds remaining){% endif %}{% if points %} | \x0309[${{points}}]{% endif %}", _("""The template used to render hints."""))) conf.registerChannelValue(Jeopardy.template, 'correct', registry.String("\x0313{{nick}}\x03 got it! The full answer was: {{answer}}. Points: \x0309{{points}}\x03 | Round Score: \x0309{{round}}\x03 | Total: \x0309{{total}}", _("""The template used to render correct answer replies."""))) conf.registerChannelValue(Jeopardy.template, 'skip', registry.String("No one got the answer! It was: {{answer}}", _("""The template used to render unanswered question and skip replies."""))) conf.registerChannelValue(Jeopardy.template, 'stop', registry.String("Jeopardy! stopped.{% if answer %} (Answer: {{answer}}){% endif %}", _("""The template used to render stop replies."""))) conf.registerChannelValue(Jeopardy.template, 'time', registry.String("{{time}} seconds remaining. [.hint] [.question] [.skip]", _("""The template used to render time remaining replies.""")))