@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()


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

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

Войти через центр авторизации
Похожие вопросы