齿轮已加载,但功能不起作用(discord.py)

Posted

技术标签:

【中文标题】齿轮已加载,但功能不起作用(discord.py)【英文标题】:Cogs are loaded but the functions don't work (discord.py) 【发布时间】:2020-04-14 22:23:43 【问题描述】:

我有一个问题。我正在用“Discord.py”写一个不和谐的机器人。我在“Raspberry Pi 3B”上使用“Python 3.8.1”。

我的主文件中有一个“加载”和一个“卸载”功能。他们做他们应该做的工作。 但我有 Cogs,例如最简单的一个:“ping”。 我可以加载“ping”,但该命令不起作用(在每个 Cog 中): "忽略命令中的异常无: discord.ext.commands.errors.CommandNotFound:找不到命令“ping””

我不知道问题可能出在哪里。根据其他人的说法,该准则似乎是正确的。我在上面观看了 YouTube 视频,但没有答案... 我将尝试使用另一个 python 版本,例如“3.7.x”...

我的 bot.py:

import discord
from discord.ext import commands

import os


client = commands.Bot(command_prefix = "/")



@client.event
async def on_ready():
    print(f'\n\nBot is ready!\nName: client.user.name\nID: client.user.id\n      ---------\n')

    return


@client.command()
async def load(ctx, extension):
    client.load_extension(f'cogs.extension') #loads the extension in the "cogs" folder
    await ctx.send(f'Loaded "extension"')
    print(f'Loaded "extension"')

    return


@client.command()
async def unload(ctx, extension):
    client.unload_extension(f'cogs.extension') #unloads the extension in the "cogs" folder
    await ctx.send(f'Unloaded "extension"')
    print(f'Unoaded "extension"')

    return



print('\n')

for filename in os.listdir('./cogs'): #loads all files (*.py)
    if filename.endswith('.py'):
        client.load_extension(f'cogs.filename[:-3]') #loads the file without ".py" for example: cogs.ping
        print(f'Loaded filename[:-3]')


client.run('MY TOKEN')

我的 ping.py:

import discord
from discord.ext import commands


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


        @commands.command()
        async def ping(self, ctx):
            await ctx.send(f'pong!\nround(client.latency * 1000)ms')

        return



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

你有没有发现什么错误??

【问题讨论】:

【参考方案1】:

您必须将函数 ping 放在类的范围内,而不是在构造函数内。

import discord
from discord.ext import commands

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

    @commands.command()
    async def ping(self, ctx): # This was inside '__init__' before
        await ctx.send(f'pong!\nround(self.client.latency * 1000)ms')
        return


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

【讨论】:

成功了!但我不得不写await ctx.send(f'pong!\nround(self.client.latency * 1000)ms') ...

以上是关于齿轮已加载,但功能不起作用(discord.py)的主要内容,如果未能解决你的问题,请参考以下文章

Discord py cogs 不加载命令

voice_client 和 url 突然在 discord.py 机器人中不起作用

discord.py remove_roles 不起作用

与 on_message 事件有关的 Discord py Cog 问题,不起作用

discord py - 自定义命令前缀不起作用(没有命令运行)

Discord嵌入图像在discord.py中不起作用