我对Python没有太多了解,仍然在学习它。
我一直在修改用Python 2.7编码的开源Discord bot。
我想添加一个允许我根据命令踢用户的功能。
喜欢的东西 [commandprefix] kickuser [userid] 但我不知道如何让机器人从我发送的消息中获取用户ID,当我尝试使其超级特定以将我的第二个帐户作为测试时,它也无法正常工作。
if message_content == ',purgeIdiots':
await kick('userid')
return
这是超特定代码,我手动将userID输入到文档中。但我无法让它发挥作用。
我非常新,我很感激一些帮助。
答案 0 :(得分:1)
如果您正在研究制作命令的过程,我建议您继续阅读有关discord.py的discord.ext.commands子库的内容。
以下是关于它的常见问题解答,以及使用它的机器人的示例:
此扩展程序允许您使用前缀创建命令。
关于通过用户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()。如果您有任何疑问,请随时提问