当前位置: 首页 > 知识库问答 >
问题:

不一致py:有没有办法使用on_message()函数获取命令的参数?

康照
2023-03-14

我只是用python编程我自己的不和谐机器人,我有一个杀死命令。它所做的只是,当你键入*杀死并提到某人(*杀死@goose.mp4)时,它会给你一个随机的场景,告诉你如何杀死他们,类似于Dank Memer机器人。我试图得到提到的用户的ID,这将是函数的第二个参数。但是我被卡住了。在阅读了应用编程接口并多次搜索后,我只得到了如何获取作者的身份并将他们与机器人联系起来的信息,而不是作者提到的那个人。

这是我目前正在使用的代码。其中一个变量的值仅用于测试目的。

if message.content.startswith('*kill'):
    print("kill command recieved")
    kill_mention_killer = message.author.mention
    kill_mention_victm = 'some guy'
    print(kill_mention_killer)

    kill_responses = [kill_mention_killer + ' kills ' + kill_mention_victim]
    kill_message = kill_responses[random.randint(-1, len(kill_responses) -1)]
    await message.channel.send(kill_message)

共有2个答案

阚亮
2023-03-14
if message.content.startswith('*kill'):

    #Mentioned or not
    if len(message.mentions) == 0:
        #no one is mentioned
        return

    pinged_user = message.mentions[0]
    killer_user = message.author
    kill_messages = [
        ...
    ]
    await ctx.send(random.choice(kill_messages))

在这里,我只是用message.mentions来查找消息中是否提到任何有效用户,如果提到!所有的提及将在message.mentions列表中,所以我通过message.mentions[0]对消息进行了第一次提及。

洪雅健
2023-03-14

您当前执行此命令的方式将不允许您获取参数。如果您试图发出这样的命令:*kill@user,那么您需要能够获得提到的用户(这是您的问题)。以下是您的操作方法:

第一步

import discord, random
from discord.ext import commands

这些进口产品非常重要。它们是需要的。

第二步

client = commands.Bot(command_prefix='*')

这将实例化整个代码中使用的客户端。现在转到实际执行命令的部分。

@client.command()
async def kill(ctx, member: discord.Member):  # This command will be named kill and will take two arguments: ctx (which is always needed) and the user that was mentioned
    kill_messages = [
        f'{ctx.message.author.mention} killed {member.mention} with a baseball bat', 
        f'{ctx.message.author.mention} killed {member.mention} with a frying pan'
    ]  # This is where you will have your kill messages. Make sure to add the mentioning of the author (ctx.message.author.mention) and the member mentioning (member.mention) to it
    await ctx.send(random.choice(kill_messages))

就这样!这就是你制作标准杀戮命令的方式。只需确保将kill_messages数组更改为您想要的任何消息即可。

 类似资料:
  • 问题内容: 我发现C#中的命名参数功能在某些情况下非常有用。 如果要在JavaScript中使用该怎么办? 我不想要的是: 我已经使用过这种方法。还有另一种方法吗? 我可以使用任何库来做到这一点。 问题答案: ES2015及更高版本 在ES2015中, 参数解构可用于模拟命名参数。这将要求调用者传递一个对象,但是如果您还使用默认参数,则可以避免函数内部的所有检查: ES5 有一种方法可以接近您想要

  • 上面的代码正在运行。 我没有得到任何错误,但我也希望机器人显示他们是afk的原因,当他们提到。有人能帮忙吗?

  • 是否有方法使用CUPS库获取打印机的所有字节命令列表,这些命令应发送到打印机以执行操作。例如:如果我想找出打印机自动剪切功能的字节命令,我可以用CUPS吗?他们有这个功能的API吗?

  • 问题内容: 我正在使用Spring 3.0.5,并为类成员尽可能多地使用@Autowire注释。我需要自动装配的bean之一需要其构造函数的参数。我浏览了Spring文档,但似乎找不到任何有关如何注释构造函数参数的参考。 在XML中,我可以将其用作bean定义的一部分。@Autowire注释是否有类似的机制? 例如: 在此示例中,如何在MyBeanService中使用@Autowire批注指定“

  • 我在我的discord机器人上遇到了一个问题。命令不起作用。我认为代码不是问题。除了命令外,一切都很完美。不和谐,如果我使用!在这里测试mytext,什么都不会发生。 提前谢谢你!

  • 我正在寻找一种方法来记录这个框架中包含的所有查询信息http://ttddyy.github.io/datasource-proxy/docs/current/user-guide/index.html#query-然而,我想排除查询参数的日志记录。有没有办法使用数据源代理来实现这一点?如果没有,我还有什么选择?我目前正在使用spring boot 2.1.1。 谢谢,布莱恩