自定义前缀 discord.py、json 文件
custom prefix discord.py, json file
我看过所有的教程、所有的论坛,他们都对 discord 机器人的自定义前缀说了同样的话。
我试过了,但没用。
我什至尝试过复制粘贴代码并更改名称。
我不知道现在要做什么,这是我的代码:
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, help_command = None)
slash = SlashCommand(client, sync_commands = True)
@client.event
async def on_ready():
activity = discord.Game(name="!help", type=3)
await client.change_presence(activity=activity)
print('online !')
@client.event
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)
@client.event
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)
这是我的错误信息:
Ignoring exception in on_guild_join
Traceback (most recent call last):
File "C:\Users\ethom\AppData\Local\Programs\Python\Python38\lib\site-packages\discord\client.py", line 343, in _run_event
await coro(*args, **kwargs)
File "C:\Users\ethom\PycharmProjects\discord\rocket_bot\rocket.py", line 32, in on_guild_join
prefixes = json.load(f)
File "C:\Users\ethom\AppData\Local\Programs\Python\Python38\lib\json\__init__.py", line 293, in load
return loads(fp.read(),
File "C:\Users\ethom\AppData\Local\Programs\Python\Python38\lib\json\__init__.py", line 357, in loads
return _default_decoder.decode(s)
File "C:\Users\ethom\AppData\Local\Programs\Python\Python38\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Users\ethom\AppData\Local\Programs\Python\Python38\lib\json\decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
在大多数情况下,您的 json.load - JSONDecodeError: Expecting value: line 1 column 1 (char 0) 错误是由于:
- 非JSON 符合引用
- XML/HTML输出(即以<开头的字符串),或者
- 不兼容的字符编码
最终,错误告诉您字符串在第一个位置已经不符合 JSON。
尝试调试以验证您正在阅读的文件的内容:
@client.event
async def on_guild_join(guild):
with open('prefixes.json', 'r') as f:
#Verify the content is really "{}"
print(f.read())
prefixes = json.load(f)
prefixes[str(guild.id)] = '!'
with open('prefixes.json', 'w') as f:
json.dump(prefixes, f, indent=4)
如果此验证未通过,您需要将 'prefixes.json' 的修复路径指定为 'complete_path/prefixes.json' 以确保读取正确的文件。
如果不是路径问题,您也可以尝试在读取文件时更改编码:
with open('prefixes.json', 'r') as f:
prefixes = json.loads(f.read().encode("utf-8"))
我已经回答了我自己的问题。
它说找不到 json 文件,但实际上,这不是代码问题。
是文件问题,我把__pycache__
文件删了,突然就可以正常使用了。
所以,我的结论是你的 bot 文件夹中不能有任何目录。
所以,祝你有美好的一天!希望我的回答对你有用。
我看过所有的教程、所有的论坛,他们都对 discord 机器人的自定义前缀说了同样的话。 我试过了,但没用。 我什至尝试过复制粘贴代码并更改名称。 我不知道现在要做什么,这是我的代码:
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, help_command = None)
slash = SlashCommand(client, sync_commands = True)
@client.event
async def on_ready():
activity = discord.Game(name="!help", type=3)
await client.change_presence(activity=activity)
print('online !')
@client.event
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)
@client.event
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)
这是我的错误信息:
Ignoring exception in on_guild_join
Traceback (most recent call last):
File "C:\Users\ethom\AppData\Local\Programs\Python\Python38\lib\site-packages\discord\client.py", line 343, in _run_event
await coro(*args, **kwargs)
File "C:\Users\ethom\PycharmProjects\discord\rocket_bot\rocket.py", line 32, in on_guild_join
prefixes = json.load(f)
File "C:\Users\ethom\AppData\Local\Programs\Python\Python38\lib\json\__init__.py", line 293, in load
return loads(fp.read(),
File "C:\Users\ethom\AppData\Local\Programs\Python\Python38\lib\json\__init__.py", line 357, in loads
return _default_decoder.decode(s)
File "C:\Users\ethom\AppData\Local\Programs\Python\Python38\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Users\ethom\AppData\Local\Programs\Python\Python38\lib\json\decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
在大多数情况下,您的 json.load - JSONDecodeError: Expecting value: line 1 column 1 (char 0) 错误是由于:
- 非JSON 符合引用
- XML/HTML输出(即以<开头的字符串),或者
- 不兼容的字符编码
最终,错误告诉您字符串在第一个位置已经不符合 JSON。
尝试调试以验证您正在阅读的文件的内容:
@client.event
async def on_guild_join(guild):
with open('prefixes.json', 'r') as f:
#Verify the content is really "{}"
print(f.read())
prefixes = json.load(f)
prefixes[str(guild.id)] = '!'
with open('prefixes.json', 'w') as f:
json.dump(prefixes, f, indent=4)
如果此验证未通过,您需要将 'prefixes.json' 的修复路径指定为 'complete_path/prefixes.json' 以确保读取正确的文件。
如果不是路径问题,您也可以尝试在读取文件时更改编码:
with open('prefixes.json', 'r') as f:
prefixes = json.loads(f.read().encode("utf-8"))
我已经回答了我自己的问题。
它说找不到 json 文件,但实际上,这不是代码问题。
是文件问题,我把__pycache__
文件删了,突然就可以正常使用了。
所以,我的结论是你的 bot 文件夹中不能有任何目录。
所以,祝你有美好的一天!希望我的回答对你有用。