mirror of
http://aero2k.de/t/repos/urlbot-native.git
synced 2017-09-06 15:25:38 +02:00
quiz frickel
This commit is contained in:
@@ -911,18 +911,12 @@ def vote(argv, **args):
|
||||
|
||||
@pluginfunction('quiz', 'play quiz', ptypes_COMMAND)
|
||||
def quiz_control(argv, **args):
|
||||
usage = """quiz mode usage: "quiz start [secs interval]", "quiz stop", "quiz answer", "quiz skip",
|
||||
"quiz rules;
|
||||
if the quiz mode is active, sentences are parsed and compared against the answer.
|
||||
usage = """quiz mode usage: "quiz start [secs interval:default 30]", "quiz stop", "quiz rules;
|
||||
Not yet implemented: "quiz answer", "quiz skip".
|
||||
If the quiz mode is active, all messages are parsed and compared against the answer.
|
||||
"""
|
||||
questions = [
|
||||
'die antwort auf alle fragen?',
|
||||
'keks',
|
||||
'Welcher Stern ist der Erde am nächsten?',
|
||||
'Sonne'
|
||||
]
|
||||
if not argv:
|
||||
return usage
|
||||
return {'msg': usage}
|
||||
|
||||
rules = """
|
||||
The answers will be matched by characters/words. Answers will be
|
||||
@@ -938,10 +932,12 @@ The answers will be matched by characters/words. Answers will be
|
||||
quizcfg = dict()
|
||||
|
||||
if argv[0] == 'start':
|
||||
interval = argv[1] if len(argv) > 1 else 60
|
||||
return quiz.start_random_question(quizcfg, interval)
|
||||
quizcfg['stop_bit'] = False
|
||||
interval = int(argv[1]) if len(argv) > 1 else 30
|
||||
quizcfg['interval'] = interval
|
||||
return quiz.start_random_question()
|
||||
elif argv[0] == 'stop':
|
||||
return quiz.stop(quizcfg)
|
||||
return quiz.end(quizcfg)
|
||||
elif argv[0] == 'answer':
|
||||
return quiz.answer(quizcfg)
|
||||
elif argv[0] == 'skip':
|
||||
|
||||
@@ -6,6 +6,7 @@ from functools import lru_cache
|
||||
import re
|
||||
|
||||
import time
|
||||
from config import plugin_config
|
||||
|
||||
|
||||
@lru_cache(10)
|
||||
@@ -40,7 +41,8 @@ def get_current_question(quizcfg):
|
||||
return int(quizcfg['active_id'])
|
||||
|
||||
|
||||
def end_question(quizcfg):
|
||||
def end_question():
|
||||
with plugin_config('quiz') as quizcfg:
|
||||
lines = ['Question time over!']
|
||||
|
||||
score = float(quizcfg.get('current_max_score', 0))
|
||||
@@ -55,26 +57,32 @@ def end_question(quizcfg):
|
||||
else:
|
||||
lines.append(lose_msg)
|
||||
|
||||
quizcfg["locked"] = False
|
||||
quizcfg['current_max_user'] = 'nobody'
|
||||
quizcfg['current_max_score'] = 0
|
||||
|
||||
quizcfg['active_id'] = None
|
||||
|
||||
start_next = None
|
||||
if not quizcfg.get('stop_bit', False):
|
||||
start_next = {
|
||||
action = {
|
||||
'msg': lines
|
||||
}
|
||||
if quizcfg.get('stop_bit', False):
|
||||
quizcfg['stop_bit'] = False
|
||||
lines.append('stopping the quiz now.')
|
||||
else:
|
||||
action['event'] = {
|
||||
'time': time.time() + 10,
|
||||
'command': (start_random_question, ([quizcfg],))
|
||||
}
|
||||
return {
|
||||
'msg': lines,
|
||||
'event': start_next
|
||||
'command': (start_random_question, ([],))
|
||||
}
|
||||
lines.append('continuing.')
|
||||
|
||||
return action
|
||||
|
||||
|
||||
def stop(quizcfg):
|
||||
def end(quizcfg):
|
||||
# TODO: cleanup the switches
|
||||
quizcfg['stop_bit'] = True
|
||||
return end_question(quizcfg)
|
||||
quizcfg['locked'] = False
|
||||
|
||||
|
||||
def rate(quizcfg, response, user):
|
||||
@@ -87,9 +95,9 @@ def rate(quizcfg, response, user):
|
||||
"""
|
||||
questions = get_questions()
|
||||
current_quiz_question = get_current_question(quizcfg)
|
||||
answer = questions[current_quiz_question+1].lower()
|
||||
the_answer = questions[current_quiz_question+1].lower()
|
||||
|
||||
anwer_words = set(re.findall('[a-zA-ZäöüÄÖÜß]+', answer))
|
||||
anwer_words = set(re.findall('[a-zA-ZäöüÄÖÜß0-9]+', the_answer))
|
||||
words = set(response.lower().split())
|
||||
|
||||
# stripping all fill words seems like a tedious task...
|
||||
@@ -115,32 +123,40 @@ def rate(quizcfg, response, user):
|
||||
# }
|
||||
|
||||
|
||||
def start_random_question(quizcfg, interval):
|
||||
stop(quizcfg)
|
||||
def start_random_question():
|
||||
with plugin_config('quiz') as quizcfg:
|
||||
if quizcfg.get("locked", False):
|
||||
return {'msg': 'already running!'}
|
||||
|
||||
else:
|
||||
quizcfg["locked"] = True
|
||||
qa = get_random_question(quizcfg)
|
||||
|
||||
return {
|
||||
'msg': ['Q: {}'.format(qa[0])],
|
||||
'event': {
|
||||
'command': (end_question, ([quizcfg],)),
|
||||
'time': time.time() + interval
|
||||
'command': (end_question, ([],)),
|
||||
'time': time.time() + int(quizcfg['interval'])
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# TODO: fix those
|
||||
def skip(quizcfg):
|
||||
""" skip the current question, omitting the
|
||||
answer and removing it from the used ones """
|
||||
raise NotImplementedError()
|
||||
quizcfg['used_ids'].remove(get_current_question(quizcfg))
|
||||
return end_question(quizcfg)
|
||||
return end_question()
|
||||
|
||||
|
||||
def answer(quizcfg):
|
||||
raise NotImplementedError()
|
||||
the_answer = get_questions()[get_current_question(quizcfg)+1]
|
||||
return {
|
||||
'msg': 'Answer to the question: {}'.format(the_answer),
|
||||
'event': {
|
||||
'command': (end_question, ([quizcfg], )),
|
||||
'command': (end_question, ([], )),
|
||||
'time': time.time() + 3
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user