Крч упростил код исправил пару данных и он мне заполнил БД записями но причину точную так и не выяснил =_=
Вот исправленный-упрощенный код.
import discord
from discord.ext import commands
import sqlite3
import os
print(os.getcwd())
settings = {
'token': '',
'bot': '',
'id': '',
'prefix': '+'
}
intents = discord.Intents.default()
intents.members = True
bot = commands.Bot(command_prefix=settings['prefix'], intents=intents)
# Подключение к базе данных
conn = sqlite3.connect('discord_users.db')
c = conn.cursor()
# Создание таблицы пользователей, если ее нет
c.execute('''CREATE TABLE IF NOT EXISTS users
(id TEXT, name TEXT)''')
# Обработчик события "Бот готов"
@bot.event
async def on_ready():
print(f'{bot.user.name} has connected to Discord!')
print(f'Pong! Latency: {round(bot.latency * 1000)}ms')
await add_all_users()
# Функция для добавления всех пользователей в базу данных
async def add_all_users():
await bot.wait_until_ready()
members = [m for g in bot.guilds for m in g.members]
for member in members:
add_user(member.id, member.display_name)
conn.commit()
# Функция для добавления пользователя в базу данных
def add_user(member_id, member_name):
try:
c.execute('SELECT * FROM users WHERE id = ?', (int(member_id),))
user = c.fetchone()
if user:
c.execute('''UPDATE users SET
name = ?
WHERE id = ?''', (member_name, member_id))
if c.rowcount > 0:
print(f'{c.rowcount} строк было обновлено.')
else:
print(f'Строки для обновления не найдены.')
else:
c.execute('INSERT INTO users VALUES (?, ?)',
(member_id, member_name))
except sqlite3.Error as e:
print(f'Ошибка при работе c базой данных: {e}')
# Команда для вывода списка ID и ников пользователей на сервере
@bot.command()
async def list_users(ctx):
guild = ctx.guild
members = [(member.id, member.display_name) for member in guild.members if not member.bot]
await ctx.send(f'Список пользователей на сервере: {members}')
# Запуск бота
if __name__ == '__main__':
bot.run(settings['token'])
conn.close()
async def add_all_users():
await bot.wait_until_ready()
members = [m for g in bot.guilds for m in g.members]
for member in members:
add_user(member.id)
conn.commit()
Про auto-commit ,ещё не встречал такую функцию . Про update Нечего не обновилось ,у меня вообще данные не появляются в БД ,есть столбцы а данных по операциям нет .
Вот исправленный-упрощенный код.