如何在Sopel IRC bot模块中设置并稍后更改@rule? (蟒蛇)

时间:2015-12-22 15:31:24

标签: python bots irc

我正在使用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!')

但同样,该功能未被触发。我出错的任何想法?或者有更好的方法吗?谢谢。

1 个答案:

答案 0 :(得分:1)

我也在开发一个琐事。您应该将答案规则作为单独的规则

@rule('^[^\.\.]')

然后评估答案

这就是说如果有答案(不是命令)