При работе с 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 шт):
Вот вы ловите все исключения в 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)
)