我正在使用Sopel(之前的Willie和之前的Jenni / Phenny)python IRC bot,因为我想为我们的IRC频道设置一个琐事测验。
使用Sopel,@ rule装饰器允许您设置机器人将监听的字符串,并在遇到时触发相应的功能。因此,对于测验,我希望机器人通过说“Correctamundo!”来确认正确的答案。当有人得到正确的问题。
A。我尝试的第一件事是嵌套功能。从q_and_as元组列表中选择一个随机问题后,它将答案(q [1])设置为应触发correct()函数的规则。
from sopel.module import commands, rule
import random
q_and_as = [('Why?', 'because'), ('Can I kick it?', 'nope')]
@commands("quizme")
def ask_q(bot, trigger):
q = random.choice(q_and_as)
bot.say(q[0])
@rule(q[1])
def correct(bot, trigger):
bot.sat('Correctamundo!')
无论出于何种原因,答案都不是以这种方式触发正确的()函数。
乙即可。我也尝试将答案(q [1])传递给一个单独的答案函数,然后将其设置为触发correct()函数的规则。
from sopel.module import commands, rule
import random
q_and_as = [('Why?', 'because'), ('Can I kick it?', 'nope')]
@commands("quizme")
def ask_q(bot, trigger):
q = random.choice(q_and_as)
bot.say(q[0])
answer(bot, trigger, q[1])
def answer(bot, trigger, answer):
@rule(answer)
def correct(bot, trigger):
bot.say(' correctamundo!')
但同样,该功能未被触发。我出错的任何想法?或者有更好的方法吗?谢谢。
答案 0 :(得分:1)
我也在开发一个琐事。您应该将答案规则作为单独的规则
@rule('^[^\.\.]')
然后评估答案
这就是说如果有答案(不是命令)