这是我第一次编写机器人编码,我需要帮助我在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之后放置的单词 .
谢谢!
1 回答
据我所知,这是代码有多个问题 . 首先,你的
wikipedia
变量需要是一个函数,好像你可能没有掌握python的一些基础知识,如果是这种情况,我建议你阅读函数here或here . 函数可以使用一个或多个参数并返回一个值 . 在您的情况下,您可能希望传递带有要定义的术语的参数,并且返回的值将是定义 . snytax就是这样的:在您的client.send_message函数中,您可以调用新创建的函数,可以使用
client.send_message(message.channel, wiki_summary(arg)
执行此操作,其中arg将替换为您希望维基百科定义的术语 . 在您的情况下,这将是"!define"之后的消息中的所有单词 . 最简单的方法是使用.split()
(Docs),这将字符串分隔为子字符串,默认的分隔符是空格,并创建包含所有子字符串的列表 . 要获取第一个单词("!define")之后的所有单词,您可以使用list indices([start:end]),选择除列表[1:]列表中第一个对象之外的所有单词,这将启动列表1中的选择在列表的末尾结束它 . 在代码中,这看起来像这样:然后,您希望将这些重要的单词作为arg传递到
wikipedia
函数中,如下所示:如Aaron所建议的那样,改进将是"!define"不区分大小写,这意味着用户输入"!Define"或"!DeFInE"并不重要,两者都将被机器人接受 . 为此,我们可以使用
.lower()
(或任何其他统一的大写功能) . 这使得字符串中的所有字符都为小写 . 要使用它,我们将检查用户消息的第一个单词是否与"!define"(小写)相同 . 像这样:这里有一些事情一次发生,首先我们要获取单词列表的消息,然后使用列表indice为0访问第一个单词,然后将其设为小写,最后我们将它与您的"!define"关键字进行比较 .
由于这会检查消息中的第一个单词是否为"!define",因此我们可以用此替换
.startswith()
函数 . 因此: