python - 维基百科搜索不和谐机器人命令

标签 python bots wikipedia discord

这是我第一次编写机器人程序,我需要有关 Discord 上的维基百科机器人的帮助。它是用维基百科API编写的。

wikipedia = wikipedia.summary('', sentences=1, chars=100, 
auto_suggest=True, redirect=True)

@client.event
async def on_message(message):
    if message.content.startswith('!define'):
       await client.send_message(message.channel, wikipedia)

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

谢谢!

最佳答案

据我所知,这段代码存在多个问题。首先,您的 wikipedia 变量需要是一个函数,似乎您可能没有掌握 python 的一些基础知识,如果是这种情况,我建议您阅读有关函数 here 的内容。或here 。函数可以接受一个或多个参数并返回一个值。在您的情况下,您需要传递一个带有您想要定义的术语的参数,返回的值将是定义。其语法如下:

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() ( Docs ),它将字符串分隔为子字符串,默认分隔符是空格,并创建一个包含所有子字符串的列表。要获取第一个单词(“!define”)之后的所有单词,您可以使用 list indices ([start:end]),要选择列表中除第一个对象之外的所有对象,请使用 list[1:],这会从列表 1 开始选择并将其结束在列表的末尾。在代码中,这看起来像这样:

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

然后,您希望将这些重要的单词作为 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”不区分大小写,这意味着用户输入“!Define”或“!DeFInE”并不重要,两者都会被机器人。为此,我们可以使用 .lower() (或任何其他统一的大写函数)。这使得字符串中的所有字符都小写。要使用它,我们将检查用户消息的第一个小写单词是否与“!define”(小写)相同。就像这样:

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

这里同时发生了一些事情,首先我们 .split() 消息来获取单词列表,然后访问列表索引为 0 的第一个单词,然后将其创建小写,最后我们将它与您的“!define”关键字进行比较。

由于这会检查消息中的第一个单词是否是“!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))

关于python - 维基百科搜索不和谐机器人命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46419639/

相关文章:

python - 如何读取 10 位 Raw 图像?其中包含 RGB-IR 数据

.net - ping/通知 .NET Windows 服务的最简单方法是什么?

azure - Bot Framework - 产品的对话状态内存存储

html - bootstrap,如何将文本放在 div 中的图像上

mysql - 截断 mediawiki

sparql - 如何在 OpenRefine 中通过 Wikipedia 文章标题进行协调?

java - Mahout 在行动 : Chapter 06: Wikipedia job fails with java. lang.ArrayIndexOutOfBoundsException

python - 定义一次 ID 号并在每个文件路径中使用它

python - 如何仅将数字的第一部分保留在数据框中的列中?

c# - Discord 机器人只显示不和谐版本