Я пытаюсь сделать так, чтобы разные серверы могли иметь разные префиксы в разнице, используя python, но это не работает. В чем проблема? - PullRequest
0 голосов
/ 23 марта 2020

Я создаю бот-диск, используя перезапись discord.py! Я пытался создать cammand, чтобы изменить префикс бота и сохранить информацию в файле json, чтобы разные серверы могли использовать разные префиксы. Затем, когда я запускаю код, он сначала кажется работающим, но затем, когда я набираю что-то в чате сервера, бот в нем выдает мне сообщение об ошибке:

Ignoring exception in on_message Traceback (most recent call last):  
File "C:\Users\hugos\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\discord\client.py", line 312, in _run_event
     await coro(*args, **kwargs)
File "C:\Users\hugos\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\discord\ext\commands\bot.py", line 930, in on_message
     await self.process_commands(message)
File "C:\Users\hugos\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\discord\ext\commands\bot.py", line 926, in process_commands
     ctx = await self.get_context(message)
File "C:\Users\hugos\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\discord\ext\commands\bot.py", line 842, in get_context
     prefix = await self.get_prefix(message)
File "C:\Users\hugos\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\discord\ext\commands\bot.py", line 787, in get_prefix
     ret = await discord.utils.maybe_coroutine(prefix, self, message)
File "C:\Users\hugos\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\discord\utils.py", line 319, in maybe_coroutine
     return await value
File "C:\Users\hugos\Desktop\bot\bot.py", line 12, in get_prefix
     prefixes=json.load(f)
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.8_3.8.752.0_x64__qbz5n2kfra8p0\lib\json\__init__.py", line 293, in load
     return loads(fp.read(),
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.8_3.8.752.0_x64__qbz5n2kfra8p0\lib\json\__init__.py", line 357, in loads
     return _default_decoder.decode(s)
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.8_3.8.752.0_x64__qbz5n2kfra8p0\lib\json\decoder.py", line 337, in decode
     obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\ProgramFiles\WindowsApps\PythonSoftwareFoundation.Python.3.8_3.8.752.0_x64__qbz5n2kfra8p0\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)

Когда я приглашаю бота в новый сервер дает мне ошибку симуляции.

Вот код:

import discord
import random
import time
import os
from sqlite3 import connect
from discord.ext import commands
import json

async def get_prefix(client, message):
    filePathNameWExt = "C:/Users/hugos/Desktop/bot/prefixes.json"
    with open(filePathNameWExt, 'r') as f:
        prefixes=json.load(f)

    return prefixes[str(message.guild.id)]


client = commands.Bot(command_prefix = get_prefix)


client.remove_command('help')

action = False;
modroles = ['bot commanders'];
Muted_role = None;
Member_role = None;





@client.event
async def on_ready(ctx=client):
    print('im online now')
    print('logged on as: ' + str(client.user))
    print('id: ' + str(client.user.id))
    activity = discord.Activity(name='hej', type=2)
    await client.change_presence(status=discord.Status.idle, activity=activity)



@client.event
async def on_guild_join(guild):
    filePathNameWExt = "C:/Users/hugos/Desktop/bot/prefixes.json"
    with open(filePathNameWExt, 'r') as f:
        prefixes=json.load(f)

    prefixes[str(guild.id)] = '!'

    with open(filePathNameWExt, 'w') as f:
        json.dump(prefixes, f, indent=4)



@client.event
async def on_guild_remove(guild):
    filePathNameWExt = "C:/Users/hugos/Desktop/bot/prefixes.json"
    with open(filePathNameWExt, 'r') as f:
        prefixes=json.load(f)

    prefixes.pop(str(guild.id))

    with open(filePathNameWExt, 'w') as f:
        json.dump(prefixes, f, indent=4)


@client.command()
async def prefix(ctx, nprefix=None):

    filePathNameWExt = "C:/Users/hugos/Desktop/bot/prefixes.json"
    with open(filePathNameWExt, 'r') as f:
        prefixes=json.load(f)

    if not nprefix:
        print('hej')
        embed = discord.Embed(title='Prefix', description=f'**{prefixes[str(ctx.guild.id)]}**', color=0x009696)
        await ctx.send(embed=embed)

    else:


        old_prefix = prefixes[str(ctx.guild.id)]

        prefixes[str(ctx.guild.id)] = nprefix

        with open(filePathNameWExt, 'w') as f:
            json.dump(prefixes, f, indent=4)

        embed = discord.Embed(title='Prefix byte', description=f'{ctx.message.author.mention} bytte prefix för den här servern\n\nGamla prefix:**{old_prefix}**\nNytt prefix:**{nprefix}**', color=0x009696)
        await ctx.send(embed=embed)```
...