1
0
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:
Thorsten
2016-01-31 21:18:09 +01:00
parent 400a77b1d5
commit e845e0c626
2 changed files with 63 additions and 51 deletions

View File

@@ -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':

View File

@@ -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
}
}