Как Discord.py управляет объектами?
В discord.py можно создавать объекты discord.ui.Button, прицеплять к ним функции обратного вызова (callback) а так же отсылать их в сообщении. Меня интересует каким образом discord.py хранит эти кнопки, а так же их функции обратного вызова. Я попробовал вывести в консоль id объекта кнопки из её обратного вызова и нажал на одну и ту же кнопку два раза. В обоих случаях id был одинаковым.
# Набор кнопок
class RoleView(discord.ui.View):
def __init__(self, guild, db):
super().__init__(timeout=None)
# Получение списка ролей
roles = db.getGuildRoles(guild.id)
# Добавление кнопок с этими ролями
for row in roles:
self.add_item(
RoleButton(row[0], row[1], row[2], guild.get_role(row[3]), db, guild)
)
# Кнопка
class RoleButton(discord.ui.Button):
def __init__(self, label, color, cooldown, role_obj, db, guild):
super().__init__(label=label, style=getattr(discord.ButtonStyle, color))
self.role_obj = role_obj
self.cooldown = cooldown
self.db = db
self.guild = guild
async def callback(self, e):
print(id(self))
Отправка:
await self.roles_channel.send(
view = RoleView(ctx.guild, self.db)
)
В итоге получается что discord.py хранит все когда-либо созданные кнопки и все их свойства где-то в памяти? Может ли бот крашнуться из-за нехватки памяти если он создал очень много кнопок?
Ответы (1 шт):
В discord.py, кнопки и их функции обратного вызова хранятся в памяти. Когда создаются объекты кнопок и устанавливаются функции обратного вызова, они сохраняются в памяти бота до тех пор, пока на них есть ссылки или пока процесс бота не завершится.
Кнопок не будет достаточным для вызова проблем с памятью. Так что вряд ли такое случится.