При работе с SQLite в Vk_api не отправляются ответы на сообщения сообщества

Предыстория

Я хотел написать бота для своей группы ВКонтакте на python, используя при этом SQLite. По гайдам, кратким обучающим статьям набросал код. Решил поместить в два файла. Вот код основного файла:

import vk_api
import random
import time
import sqlite3
from base import *

conn = sqlite3.connect('BotBase.db')
cur = conn.cursor()

token = "туттокенгруппы"

vk = vk_api.VkApi(token=token)

vk._auth_token()

while True:
    try:
        messages = vk.method("messages.getConversations", {"offset": 0, "count": 20, "filter": "unanswered", "extended": 1})
        if messages["count"] >= 1:
            id = messages["items"][0]["last_message"]["from_id"]
            body = messages["items"][0]["last_message"]["text"]
            CheckBase(id)
            if body.lower() == "привет":
                vk.method("messages.send", {"peer_id": id, "message": "лимон", "random_id": random.randint(1, 2147483647)})
            elif body.lower() == "кто я":
                vk.method("messages.send", {"peer_id": id, "message": "клоун", "random_id": random.randint(1, 2147483647)})
            elif body.lower() == "profile":
                vk.method("messages.send", {"peer_id": id, "message": "you лось" + , "random_id": random.randint(1, 2147483647)})
            else:
                vk.method("messages.send", {"peer_id": id, "message": "пук-пук  " + str(body.lower()), "random_id": random.randint(1, 2147483647)})
    except Exception as E:
        time.sleep(1)

Код второго:

import vk_api
import random
import time
import sqlite3

conn = sqlite3.connect('BotBase.db')
cur = conn.cursor()
cur.execute("""CREATE TABLE IF NOT EXISTS users(userid INTEGER PRIMARY KEY, nickname TEXT, currency INT);""")

def SetToBase(userid, nickname, currency): 
    cur.execute("""INSERT INTO users(userid, nickname, currency) 
        VALUES(userid, nickname, currency);""")

def CheckBase(int UserId):
    info = curs.execute('SELECT * FROM users WHERE userid = UserId')
    if info.fetchone() is None: 
        SetToBase(UserId, "User", 100)
#def GetName(UserId):
    #info = curs.execute('SELECT nickname FROM users WHERE userid = UserId')
    #return "123"
conn.commit()

Ошибок в консоли нет, но на сообщения не приходят ответы. При этом, если я закомментирую одну строчку первого файла:

CheckBase(id)

То ответы приходят. Скорее всего тут допущена какая-то глупая ошибка. Надеюсь мне укажет на неё кто-нибудь.


Ответы (1 шт):

Автор решения: gil9red

Вот вы ловите все исключения в except Exception as E:, а где их обработка? Хотя бы вывели в консоль. Скорее всего, у вас где-то ошибка, которую вы и не можете увидеть. Это может быть ошибка обработки данных из vk или ошибка работы с базой данных.

Добавьте traceback:

import traceback

while True:
    try:
        ...
    except Exception as e:
        print(traceback.format_exc())
        time.sleep(1)

А так, я думаю у вас ошибка в SetToBase, т.к. по факту вы не вносите значения из функции в запрос:

def SetToBase(userid, nickname, currency): 
    cur.execute("""INSERT INTO users(userid, nickname, currency) 
        VALUES(userid, nickname, currency);""")

Попробуйте:

def SetToBase(userid, nickname, currency): 
    cur.execute(
        "INSERT INTO users(userid, nickname, currency) VALUES(?, ?, ?)",
        (userid, nickname, currency)
    )
→ Ссылка