维基百科搜索discord bot命令

时间:2017-09-26 06:54:11

标签: python bots wikipedia discord

这是我第一次编写机器人编码,我需要帮助我在Discord上使用我的Wikipedia bot。它是用维基百科api编写的。

0

如何让机器人在第一行识别搜索?我希望命令能够搜索!define之后放置的单词。

谢谢!

2 个答案:

答案 0 :(得分:2)

据我所知,这是代码有多个问题。首先,你的wikipedia变量需要是一个函数,好像你可能没有掌握python的一些基础知识,如果是这种情况,我建议你阅读函数here或{ {3}}。函数可以使用一个或多个参数并返回一个值。在您的情况下,您可能希望传递带有要定义的术语的参数,并且返回的值将是定义。 snytax就是这样的:

def wiki_summary(arg):

    definition = wikipedia.summary(arg, sentences=1, chars=100, 
    auto_suggest=True, redirect=True)
    return definition

在您的client.send_message函数中,您可以调用新创建的函数,可以使用client.send_message(message.channel, wiki_summary(arg)执行此操作,其中arg将替换为您希望维基百科定义的术语。 在你的情况下,这将是"!define"之后的消息中的所有单词。最简单的方法是使用.split()here),将字符串分隔为子字符串,默认的分隔符为空格,并创建包含所有子字符串的列表。要获得第一个单词之后的所有单词("!define"),您可以使用Docs([start:end])来选择除列表中第一个对象之外的所有单词[ 1:],这将在列表list indices处开始选择,并在列表末尾结束。在代码中,这看起来像这样:

words = message.content.split()
important_words = words[1:]

然后,您希望将这些重要的字词作为arg传递到wikipedia函数中,如下所示:

@client.event
async def on_message(message):
    if message.content.startswith('!define'):
       words = message.content.split()
       important_words = words[1:]
       await client.send_message(message.channel, wiki_summary(important_words)

正如Aaron所建议的那样,改进将是"!定义"不区分大小写,这意味着用户输入并不重要"!定义"或者"!DeFInE",两者都将被机器人接受。为此,我们可以使用.lower()(或任何其他统一的大写功能)。这使得字符串中的所有字符都为小写。要使用它,我们将检查用户消息的第一个单词是否与"!define"相同。 (小写)。像这样:

if message.content.split()[0].lower() == "!define"

这里有一些事情一次发生,首先我们.split()获取单词列表的消息,然后使用列表indice为0访问第一个单词,然后将其设为小写,最后我们进行比较它给你的"!定义"关键字。

因为这会检查消息中的第一个单词是否为"!define"我们可以用此替换.startswith()函数。就这样:

@client.event
async def on_message(message):
words = message.content.split()
    if words[0].lower() == "!define":
       important_words = words[1:]
       await client.send_message(message.channel, wiki_summary(important_words))

答案 1 :(得分:0)

您还应该将“ @ client.event”更改为“ @ client.listen()”,以便其他机器人命令可以正常使用。