Задать вопрос
@MIHUTKA

Пытаюсь сделать подсчет количество сообщений но не выходит discord.py?

@commands.Cog.listener()
    async def on_message(self, message):
        if not message.author.bot:
            if not message.content.startswith('*'):
                base = sqlite3.connect('cogs/Warn.db')
                cur = base.cursor()
                cur.execute("""CREATE TABLE IF NOT EXISTS users(
                    guildid INT,
                    id INT,
                    messages INT)
                """)
                base.commit()
                messages = cur.execute(f"SELECT id FROM users WHERE guildid = {message.guild.id} and id={message.author.id}")
                if messages == None:
                    cur.execute(f"INSERT INTO users VALUES ({guild.id}, {author.id}, 0)")
                    base.commit()
                    cur.execute(f"UPDATE users SET messages + 1 WHERE guildid = {message.guild.id} and id={message.author.id}")
                    base.commit()
                else:
                    cur.execute(f"SELECT id FROM users where guildid = {message.guild.id} and id={message.author.id}")
                    if len(message.content) >=  1:
                        cur.execute(f"UPDATE users SET messages = messages + 1 WHERE guildid = {message.guild.id} and id={message.author.id}")
                        base.commit()


Должно заносить все в дб, но туда ничего не пишет
  • Вопрос задан
  • 224 просмотра
Подписаться 2 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
1. Запрос CREATE TABLE не нужно делать при каждом сообщении. Перенеси его в код, который вполняется при запуске бота.
2. Не используй f-строки для формирования запросов. Почитай про подстановку параметров запроса.
3. cur.execute() не вернёт тебе None или данные. Вызови метод fetchone(), чтобы получить одну строку данных, или None если данных нет.
4. Если ты используешь sqlite, почитай про синтаксис INSERT ON CONFLICT DO UPDATE. Позволяет выполнить операцию в духе "создай запись, а если такая уже есть - обнови её", и тем самым свернуть твой if в один запрос. В других СУБД есть аналогичная возможность.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
от 200 000 до 300 000 ₽
Greenway Global Новосибирск
от 150 000 ₽
Akronix Санкт-Петербург
от 150 000 до 200 000 ₽
31 янв. 2025, в 09:18
10000 руб./за проект
31 янв. 2025, в 08:29
1000 руб./в час
31 янв. 2025, в 06:03
9999999 руб./за проект