据我所见,这是代码有多个问题。首先,你的wikipedia
变量需要是一个函数,好像你可能没有掌握一些python的基础知识,如果是这种情况,我建议你阅读函数here或here。一个函数可以带一个或多个参数并返回一个值。在你的情况下,你会想要传递一个你想定义的术语的参数,并且返回值就是定义。造成这种情况的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()
(Docs),它将字符串分隔为子字符串,默认分隔符是空格,并创建一个包含所有子字符串的列表。要获得第一个单词后的所有单词(“!define”),可以使用list indices([start:end])来选择除列表中第一个对象列表[1:]以外的所有内容,列表1并结束它在列表的末尾。在这段代码看起来是这样的:
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)
的改进,由亚伦的建议,将要让“!define”不区分大小写,这意味着用户键入“!Define”或“!DeFInE”并不重要,两者都会被bot接受。要做到这一点,我们可以使用.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))
为了清楚起见,我会将'wikipedia'函数重命名为其他内容。 'wiki_summary(search_term)'不太可能与模块的wikipedia'混淆。否则,您可以点击我输入的答案中的所有要点。另一个建议是调用'if message.content.lower()。startswith('!define')'以确保用户在调用该命令时不需要担心大写字母(包括幽默和捕获打字错误这对机器人来说很容易修正)。也可以在顶部声明'单词',然后是'if words [0] .lower()=='define!' – Aaron3468
你说得对,我会相应地编辑我的答案,谢谢。 对不起,您的答案被盗。 –
哈哈,不用担心。我们都在这里帮助彼此,而且代表比较经得起时间考验的答案并不重要。 – Aaron3468