微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我在处理这段代码时遇到问题

如何解决我在处理这段代码时遇到问题

我正在为我的不和谐机器人制作管理齿轮,但我的代码无法识别“ctx”。 PyCharm 建议用 'self' 替换 'ctx',我不知道 'self' 是做什么的。根据 PyCharm 的说法,我必须写下数以百万计的其他东西。 PyCharm 无法识别公会发送作者频道,并且它还说return ctx.author.guild_permissions.manage_messages是无法访问的代码。请注意,如果这似乎是一个非常愚蠢的问题,我是 2 周前开始的初学者。

至于代码

class Administration(commands.Cog):
    def __init__(self,client):
        self.client = client

    @commands.Cog.listener()
    async def on_ready(self):
        print("Admin cog ready")

    async def cog_check(self,ctx):
        admin = get(ctx.guild.roles,name="Admin")
        return admin in ctx.author.roles

        return ctx.author.guild_permissions.manage_messages

    @commands.command(aliases=["purge"])
    async def clear(ctx,amount=3):
        """Clears 3 messages"""
        await ctx.channel.purge(limit=amount)

    @commands.command(pass_context=True)
    async def giverole(ctx,user: discord.Member,role: discord.Role):
        """Gives a role to a user"""
        await user.add_roles(role)
        await ctx.send(f"hey {ctx.author.name},{user.name} has been giving a role called: {role.name}")

    @commands.command(aliases=['make_role'])
    @commands.has_permissions(manage_roles=True)
    async def create_role(ctx,*,name):
        """Creates a role"""
        guild = ctx.guild
        await guild.create_role(name=name)
        await ctx.send(f'Role `{name}` has been created')


    @commands.command(name="slap",aliases=["warn"])
    async def slap(ctx,members: commands.Greedy[discord.Member],reason='no reason'):
        """Warns someone"""
        slapped = ",".join(x.name for x in members)
        await ctx.send('{} just got slapped for {}'.format(slapped,reason))


def setup(client):
    client.add_cog(Administration(client))

解决方法

在类中,(除非它是 staticmethodclassmethod)您总是将 self 作为第一个参数传递。

@commands.command(aliases=["purge"])
async def clear(self,ctx,amount=3): # Note how I put `self` as the first arg,do the same in all commands in the cog
    """Clears 3 messages"""
    await ctx.channel.purge(limit=amount)

另外,这永远行不通

async def cog_check(self,ctx):
    admin = get(ctx.guild.roles,name="Admin")
    return admin in ctx.author.roles

    return ctx.author.guild_permissions.manage_messages

该函数无论何时到达第一个 return 都会结束,如果您还想计算第二个 {{1},您可以简单地使用 ANDOR 逻辑运算符}} 声明

return

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。