如何在命令

时间:2017-09-08 03:50:42

标签: python discord discord.py

我对Python没有太多了解,仍然在学习它。

我一直在修改用Python 2.7编码的开源Discord bot。

我想添加一个允许我根据命令踢用户的功能。

喜欢的东西 [commandprefix] kickuser [userid] 但我不知道如何让机器人从我发送的消息中获取用户ID,当我尝试使其超级特定以将我的第二个帐户作为测试时,它也无法正常工作。

    if message_content == ',purgeIdiots':
        await kick('userid')
        return

这是超特定代码,我手动将userID输入到文档中。但我无法让它发挥作用。

我非常新,我很感激一些帮助。

3 个答案:

答案 0 :(得分:1)

如果您正在研究制作命令的过程,我建议您继续阅读有关discord.py的discord.ext.commands子库的内容。

以下是关于它的常见问题解答,以及使用它的机器人的示例:

  

FAQ

     

Bot Example

此扩展程序允许您使用前缀创建命令。

关于通过用户ID进行踢的问题,使用命令扩展名可以执行以下操作:

@bot.command(pass_context = True)
async def kick(ctx, userName: discord.User):
    await bot.kick(userName)

我相信这应该有用,但我还是无法编译它。但是,请详细了解命令扩展,因为它会帮助您检查内容的消息。

您首先需要导入discord.ext,您可以在程序顶部使用from discord.ext import commands执行此操作。

然后,您需要定义僵尸程序,以确保您可以使用@bot.command之类的内容,因为您需要这样做。这样做:bot = commands.Bot(command_prefix=',', description=description),现在将逗号定义为命令前缀。

这应该允许我最初添加的代码段与用户能够键入,kick <username>一起运行。

答案 1 :(得分:1)

@commands.has_permissions(kick_members=True)
@bot.command()
async def kick(ctx, user: discord.Member, *, reason="No reason provided"):
        await user.kick(reason=reason)
        kick = discord.Embed(title=f":boot: Kicked {user.name}!", description=f"Reason: {reason}\nBy: {ctx.author.mention}")
        await ctx.message.delete()
        await ctx.channel.send(embed=kick)
        await user.send(embed=kick)

答案 2 :(得分:0)

这是我在机器人中使用的我的kick命令     注意:在从discord.ext.commands编写下面的命令==>之前,您需要先编写此东西。commandsimport has_permissions,CheckFailure,BadArgument

@bot.command(pass_context=True, name="kick")

@has_permissions(kick_members = True)

异步def踢(ctx,*,目标:成员):

if target.server_permissions.administrator:

    await bot.say("Target is an admin")

else:
    try:
        await bot.kick(target)
        await bot.say("Kicked")
    except Exception:
        await bot.say("Something went wrong")

@ kick.error

  async def kick_error(error, ctx):

如果isinstance(错误,CheckFailure):

     await bot.send_message(ctx.message.channel, "You do not have permissions")

elif isinstance(error, BadArgument):

    await bot.send_message(ctx.message.channel, "Could not identify target")

else:
    raise error

所以现在命令@ bot.command(pass_context = True)

@has_permissions(kick_members = True)==>它检查是否  使用该命令的用户是否具有该权限。其余内容都是自我解释。 @ kick.error部分检查该kick命令的错误。注意:如果在第一部分中,您在a右边是异步定义 kick_command @ kick.error您必须正确@ kick_command.error。

还请注意: 在您的机器人命令中,您已编写@ client = command.Bot(command_prefix ='YOUR_PREFIX')

@ bot.command()中的

您只需要将@bot更改为您在该@client中编写的内容即可: 对于前。如果您写了@ mybot.command_Bot(command_prefix ='YOUR_PREFIX') 您必须将@bot更改为@ mybot.command()。如果您有任何疑问,请随时提问