我试着做一个简单的主持人机器人。代码看起来像这样。
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'])在这个唯一的warn命令中,rest成功地运行,所有命令都抛出一个错误,如下所示。
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它正在抛出一个丢失的权限,但我是服务器的所有者,甚至添加了机器人作为仰慕者。即使尝试了一个管理员角色,并给予它所有的权限,但仍然没有成功。这个错误一次又一次地出现。
即使有人知道如何在多个角色之间进行检查,比如,如果有人拥有管理员或踢成员权限,那么请告诉我如何这样做。提前谢谢你的帮助。如果需要更多的信息,请告诉我。
发布于 2021-02-19 12:14:49
您在控制台的最后一行中遇到的错误;discord.errors.Forbidden: 403 Forbidden (error code: 50013): Missing Permissions是因为bot缺少对bot当前具有的给定权限执行这些操作的权限。
这可能发生在以下几个方面;
此外,这些问题与您编写的代码无关,并且可以通过角色层次结构或bot invite链接权限在您的服务器中修复。
我还建议比较角色,以确保用户一开始就不能尝试在更高级别的成员上尝试适度,这也有助于缓解问题。
这样,您就可以使用>=和top_role属性来比较用户与您试图对其进行适度处理的成员相比所扮演的角色,如果您的权限低于您试图调整的成员的权限,则它将阻止其余代码运行。这里有一个简单的方法,
if member.top_role >= ctx.author.top_role:
await ctx.send(f"You can only moderate members below your role")
returnhttps://stackoverflow.com/questions/66276836
复制相似问题