首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@commands.has_permissions(administrator=True)不能正常工作?

@commands.has_permissions(administrator=True)不能正常工作?
EN

Stack Overflow用户
提问于 2021-02-19 11:35:26
回答 1查看 1.6K关注 0票数 1

我试着做一个简单的主持人机器人。代码看起来像这样。

代码语言:javascript
复制
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成功地运行,所有命令都抛出一个错误,如下所示。

代码语言:javascript
复制
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

它正在抛出一个丢失的权限,但我是服务器的所有者,甚至添加了机器人作为仰慕者。即使尝试了一个管理员角色,并给予它所有的权限,但仍然没有成功。这个错误一次又一次地出现。

即使有人知道如何在多个角色之间进行检查,比如,如果有人拥有管理员踢成员权限,那么请告诉我如何这样做。提前谢谢你的帮助。如果需要更多的信息,请告诉我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-19 12:14:49

您在控制台的最后一行中遇到的错误;discord.errors.Forbidden: 403 Forbidden (error code: 50013): Missing Permissions是因为bot缺少对bot当前具有的给定权限执行这些操作的权限。

这可能发生在以下几个方面;

  • 充足的Bot权限尚未从invite链接
  • 中启用,成员具有比bot
  • 更高或相同的角色,@everyone角色没有权限

此外,这些问题与您编写的代码无关,并且可以通过角色层次结构或bot invite链接权限在您的服务器中修复。

我还建议比较角色,以确保用户一开始就不能尝试在更高级别的成员上尝试适度,这也有助于缓解问题。

这样,您就可以使用>=top_role属性来比较用户与您试图对其进行适度处理的成员相比所扮演的角色,如果您的权限低于您试图调整的成员的权限,则它将阻止其余代码运行。这里有一个简单的方法,

代码语言:javascript
复制
if member.top_role >= ctx.author.top_role:
    await ctx.send(f"You can only moderate members below your role")         
    return
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66276836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档