在discord.py 中,您可以创建discord.ui.Button 对象,将回调函数附加到它们,还可以在消息中发送它们。我对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 将所有创建的按钮及其所有属性存储在内存中的某个位置?如果机器人创建了很多按钮,它是否会因内存不足而崩溃?
在discord.py中,按钮及其回调函数存储在内存中。创建按钮对象并设置回调后,它们将存储在机器人的内存中,直到它们被引用或直到机器人进程退出。