当前位置: 首页 > 知识库问答 >
问题:

Cog文件无法定位。同一目录中的json文件

轩辕欣可
2023-03-14

正如标题所示,我为不和谐机器人创建的齿轮文件无法读取/写入保存在同一文件夹中的. json文件。我尝试过手动指定文件路径,将. json文件移动到主bot文件的根文件夹,重命名. json文件,但都无济于事。移动. json文件可以阻止bot抛出丢失的文件错误,但它会使cog文件不再同时工作,这实际上造成了两个没有解决方案的问题。

cog文件如下所示

import discord
import logging
import json
import os
from discord.ext import commands


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

#Sets default prefix for server on first join    
    @commands.Cog.listener()
    async def on_guild_join(guild):
        with open('prefixes.json', 'r') as f:
            prefixes = json.load(f)
        prefixes[str(guild.id)] = '.'
        with open ('prefixes.json', 'w') as f:
            json.dump(prefixes, f, indent = 4)

#Command for assigning a new prefix
@commands.command()
@commands.has_role("admin" == True)
async def change_prefix(ctx, prefix):
    with open('prefixes.json', 'r') as f:
        prefixes = json.load(f)
    prefixes[str(ctx.guild.id)] = prefix
    with open ('prefixes.json', 'w') as f:
        json.dump(prefixes, f, indent = 4)
    await ctx.send(f'Prefix changed to: {prefix}')

#Placeholder Prefix Command
def get_prefix(client, message):
    with open('prefixes.json', 'r') as f:
        prefixes = json.load(f)
    return prefixes[str(message.guild.id)]
client = commands.Bot(command_prefix = get_prefix)

#Removes the stored prefix when bot is kicked
async def on_guild_remove(guild):
    with open('prefixes.json', 'r') as f:
        prefixes = json.load(f)
    prefixes.pop(str(guild.id))
    with open ('prefixes.json', 'w') as f:
        json.dump(prefixes, f, indent= 4)


#Connects Cog to bot
def setup(client):
    client.add_cog(Prefixes(client))

如果有帮助的话,主文件如下

from cogs.Prefix_changer import Prefixes, get_prefix
import discord
import logging
import os
import discord.ext.commands.errors
from discord.ext import commands


client = commands.Bot(command_prefix = get_prefix)

#Error messages
@client.event
async def on_command_error(ctx, error):
    if isinstance(error, commands.MissingRequiredArgument):
        await ctx.send('Please specify a valid command extension.')
    elif isinstance(error, commands.CommandNotFound):
        await ctx.send('Command is not valid.')
    elif isinstance(error, commands.ExtensionNotLoaded):
        await ctx.send('Extension was not loaded.')
    elif isinstance(error, commands.ExtensionNotFound):
        await ctx.send('Extension could not be found.')
    elif isinstance(error, commands.ExtensionAlreadyLoaded):
        await ctx.send('Extension has already been loaded.')

#Loading Cogs
@client.command()
async def load(ctx, extension):
    client.load_extension(f'cogs.[extension]')
#unloading Cogs
@client.command()
async def unload(ctx, extension):
    client.unload_extension(f'cogs.[extension]')
#Searches the primary directory for Cogs folder
for filename in os.listdir('./cogs'):
    if filename.endswith('.py'):
        client.load_extension(f'cogs.{filename[:-3]}')


client.run('token removed')

在使用诸如“.”之类的前缀之前,bot运行正常或以“$”为例。一旦使用前缀,它将抛出以下错误:

分/文件/Py括号bot/Main。py“忽略on_消息回溯中的异常(最近一次调用):File”/Library/Frameworks/Python。framework/Versions/3.9/lib/python3。9/站点包/discord/客户端。py“,第343行,在_run_event wait-coro(*args,**kwargs)文件“/库/框架/Python中。framework/Versions/3.9/lib/python3。9/站点包/discord/ext/commands/bot。py”,第979行,在on_message wait self.process_命令(消息)文件“/Library/Frameworks/Python中。framework/Versions/3.9/lib/python3。9/站点包/discord/ext/commands/bot。py”,第975行,进程中命令ctx=wait self.get_上下文(消息)文件“/Library/Frameworks/Python。framework/Versions/3.9/lib/python3。9/站点包/discord/ext/commands/bot。py”,第886行,在get_context prefix=wait self.get_prefix(消息)文件“/Library/Frameworks/Python中。framework/Versions/3.9/lib/python3。9/站点包/discord/ext/commands/bot。py”,第831行,在get_prefix ret=wait discord.utils.maybe_coroutine(前缀,self,message)文件“/Library/Frameworks/Python中。framework/Versions/3.9/lib/python3。9/站点包/discord/utils。py“,第341行,在coroutine value=f(*args,**kwargs)文件“/Users/vincent/Documents/py-bracket-bot/cogs/Prefix\u-changer中。py“,第34行,在get_前缀中,open('prefixes.json','r')作为f:FileNotFoundError:[Errno 2]没有这样的文件或目录:'prefixes.json'

如果不是很明显的话,答案是肯定的。json文件是前缀。json

共有1个答案

公羊新
2023-03-14

将文件路径设置为包含cogs/修复了它。我不知道cog不会在所在的同一目录中查找。json文件。

 类似资料:
  • 我的应用程序中有一个rails自定义记录器。 路径-/ /current/log 文件-custom.json custom.json.20210712 这是我的要求 旋转后的文件应该放在不同的位置,即/ /current/log/archive/custom.json.20210712 旋转文件的名称也应该有hour和min,也就是说,我需要,而不是。格式化

  • 我正在尝试访问。我已经使用ebconfig将json文件下载到/tmp/目录,以在S3上存储私钥。 但它给了我以下错误 错误:EACCES:权限被拒绝,打开“/tmp/firebaseadminsdk”。json’ 文件中有一段说 第二个条目使用S3Auth身份验证方法从指定的URL下载私钥,并将其保存到/etc/pki/tls/certs/server。钥匙然后,代理服务器可以从此位置读取私钥,

  • 我在大学已经学习了4周的JavaScript,两周前在我自己的时间里开始学习Java。事实证明,它很有用,因为我们有一个项目,我们必须制定一个程序(这是我们为项目选择的)。 问题是,虽然我知道Java的大部分基础知识,但我对制作我们想要制作的程序知之甚少,我所有的其他团队成员甚至从未接触过Java,有些人甚至在课堂上与JavaScript作斗争。 对不起,顺便说一句,我只是想让人们了解我的来历。

  • 我不确定我是否错过了这里的东西,但我有一个. py文件在我的齿轮文件夹,不会加载。不断给我错误”“上述异常是以下异常的直接原因: discord.ext.commands.errors.扩展没有找到:扩展cogs.determine命中无法加载。 以下是我的文件位置的图片:https://imgur.com/a/gBbX4lM 我也会在这里复制代码供您查看,但会剪掉大部分代码,因为它相当长。如果你

  • 问题内容: 我有此功能可以将图像保存在tmp文件夹中 但是,当我打开应用程序的temp文件夹时,它是空的。将图像保存在temp文件夹中,我做错了什么? 问题答案: 不是获取的文件路径的正确方法,请改用: 或者 更好的是, 仅使用URL: 更好的是,使用 并检查成功或失败: Swift 3/4更新:

  • 问题内容: 我编写了一个小模块,该模块首先在目录中找到所有文件,然后合并它们。但是,从目录打开这些文件时遇到问题。我确保我的文件和目录名称正确,并且文件实际上在目录中。 下面是代码。 下面是错误。 问题答案: listdir仅返回文件名:https ://docs.python.org/2/library/os.html#os.listdir您需要完整路径才能打开文件。在打开文件之前,还要检查以确