#python #sqlite #discord.py
Вопрос:
У меня возникла проблема, когда я перечисляю пользователей из своей базы данных.
Первоначально команда работала нормально, как показано на фотографии ниже
Для этого я использовал простую строку кода, чтобы пропустить идентификатор пользователя, если = Нет. Хотя, когда я недавно запустил своего бота на своем домашнем сервере, я заметил, что у меня возникла другая проблема. Ниже приведен код для разбитого меню.
Это последняя версия, и она сломана. При этом используется тот же код, что и в таблице лидеров выше, она только что была переименована
class GlobalXpMenu(ListPageSource):
def __init__(self, ctx, data):
self.ctx = ctx
super().__init__(data, per_page = 10)
async def write_page(self, menu, fields=[]):
offset = (menu.current_page * self.per_page) 1
len_data = len(self.entries)
embed = Embed(title="Global XP Leaderboard",
colour=self.ctx.author.colour)
embed.set_thumbnail(url = self.ctx.guild.icon_url)
embed.set_footer(text = f"{offset:,} - {min(len_data, offset self.per_page-1):,} of {len_data:,} members.")
for name, value in fields:
embed.add_field(name=name, value=value, inline=False)
return embed
async def format_page(self, menu, entries):
Ниже приведен код, который я использовал для своего первоначального исправления. Если бы кто-нибудь мог помочь, это было бы фантастически. Спасибо
def get_table_rows():
for index , (user_id, xp) in enumerate(entries, start = 1):
user = self.ctx.bot.get_user(user_id)
if user is None:
db = sqlite3.connect('xpdata.db')
cursor = db.cursor()
cursor.execute(f'DELETE FROM xpdata WHERE user_id={user_id}')
# If no user with the current 'user_id' exists, skip it.
continue
Остальная часть кода таблицы.
yield f"{index}. {user.name} (XP: {xp} )n"
fields = []
table = "n".join(get_table_rows())
fields.append(("Ranks" , table))
return await self.write_page(menu, fields)
Комментарии:
1. Я думаю, что схема базы данных все еще более старая, возможно, вам потребуется повторно запустить базу данных