【发布时间】:2021-05-22 09:37:51
【问题描述】:
我正在尝试制作一个简单的版主机器人。 代码看起来像这样。
import discord
from discord.ext import commands
from random import choice
import os
client = commands.Bot(command_prefix=commands.when_mentioned_or("%"), description='A simple Moderator bot')
def colour():
l = [ 1752220, 3066993, 3447003, 10181046, 15844367, 15105570, 15158332, 3426654, 16580705 ]
return choice(l)
@client.event
async def on_ready():
change_status.start()
print("The Bot is online!")
@client.command()
@commands.has_permissions(administrator=True)
async def kick(ctx, user : discord.Member = None, *,reason = "No reason provided"):
await user.kick(reason = reason)
await ctx.send("Kicked the user.")
@client.command()
@commands.has_permissions(administrator=True)
async def ban(ctx, user : discord.Member = None, *,reason = "No reason provided"):
await user.ban(reason = reason)
await ctx.send("Banned the user")
@client.command()
@commands.has_permissions(administrator=True)
async def warn(ctx, user : discord.Member = None, *,reason = "No reason provided"):
await user.send(f"You have been **Warned** by **{ctx.author.name}** in the **{ctx.guild.name}** for the reason: **{reason}** ")
await ctx.send("Warned the user")
client.run(os.environ['token'])
在这个只有警告命令成功运行的情况下,所有命令都会抛出一个看起来像这样的错误。
Ignoring exception in command kick:
Traceback (most recent call last):
File "main.py", line 140, in kick
await user.kick(reason = reason)
File "/app/.heroku/python/lib/python3.6/site-packages/discord/member.py", line 524, in kick
await self.guild.kick(self, reason=reason)
File "/app/.heroku/python/lib/python3.6/site-packages/discord/guild.py", line 1886, in kick
await self._state.http.kick(user.id, self.id, reason=reason)
File "/app/.heroku/python/lib/python3.6/site-packages/discord/http.py", line 241, in request
raise Forbidden(r, data)
discord.errors.Forbidden: 403 Forbidden (error code: 50013): Missing Permissions
它抛出了一个丢失的权限,但我是服务器的所有者,甚至将机器人添加为管理员。 甚至尝试通过设置管理员角色并为其授予所有权限,但仍然没有运气。 这个错误一再出现。
即使有人知道如何在多个角色之间进行检查,例如是否有人拥有管理员或踢成员权限然后执行此操作,请告诉我如何执行此操作。 在此先感谢您的帮助。 如果需要更多信息,请告诉我。
【问题讨论】:
-
您尝试踢出的用户是否也具有管理员角色?机器人无法踢出具有比他更高层级的角色的人。
-
哦,是的。我试图踢出机器人,而机器人获得了管理员权限。你能告诉如何解决这个问题。就像应该有办法以管理员角色踢机器人一样。
-
你的机器人不应该有管理员角色,并且机器人永远无法踢出比他更高角色层次的人。
-
那么有没有办法让最高角色可以踢除主人以外的所有人
-
只需为机器人创建一个角色,然后在角色层次结构中将其放在管理员/所有者角色的下方。它可以踢除主人以外的所有人。
标签: discord discord.py bots