Есть ли какой-либо способ получить идентификатор сервера без сообщения от сервера?

#python-3.x #discord.py

#python-3.x #discord.py

Вопрос:

Я пытаюсь создать музыкального бота на Python с возможностью создания очереди песен для каждого сервера, и это сработало, но единственная проблема заключалась в том, что очередь была одной для всех серверов («очередь» на самом деле была списком).

итак, я подумал: «хорошо, я просто создам dict, где ключи — это идентификаторы серверов, а значения — очереди», но это проблематично сделать, потому что, если я изменяю очередь в функции on_message, она изменяет ее в каждом сообщении для каждого сервера, который хочет получить информацию об очереди, что делает всю эту штуку бесполезной.

вот материал, на который я ссылался — я не буду добавлять больше, чтобы загромождать вопрос, потому что это действительно не имеет значения

 queues = {}
queue = []
async def on_message(ctx):
    server = ctx.server
    id = server.id
    queues[id] = queue  # this is where I want to create an empty queue for every server so it shouldn't be here
  

есть ли какой-либо способ выполнить эту процедуру с очередью в моем методе без использования реальных очередей из async? поскольку я ожидаю, что это будет возможно, и это работает в случае одного сервера, должен быть способ обобщить это

Ответ №1:

В вашем on_ready событии вы можете инициализировать сопоставление идентификаторов сервера с пустыми списками:

 queues = {}

@bot.event
async def on_ready():
    for server in bot.servers:
        queues[server.id] = []
  

Комментарии:

1. @idanb Пожалуйста, отметьте это решение как официальный ответ, если оно помогло вам.