Answer the question
In order to leave comments, you need to log in
Why is the VK bot not working?
After starting, the bot stops.
I thought that due to a database error, since the sqlite database does not like different connections, I transferred everything to one file, the same error, it also stops:
[VKBottle] Using JSON_MODULE - ujson [TIME 18:08:20]
[VKBottle] Using asyncio loop - asyncio.windows_events [TIME 18:08:20]
[VKBottle] Receiving updates from conversations [TIME 18:08:21]
[VKBottle] Conversation count - 10 [TIME 18:08:21]
[VKBottle] Answering... [TIME 18:08:21]
[VKBottle] While parent_processor was handling error occurred
Traceback (most recent call last):
File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\vkbottle\framework\framework\swear_handler.py", line 26, in wrapper
return await func(*args, **kwargs)
File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\vkbottle\framework\bot\processor.py", line 35, in parent_processor
return await self.message_processor(obj, client_info)
File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\vkbottle\framework\bot\processor.py", line 81, in message_processor
task = await rules[0].call(*args, **kwargs)
File "c:\Users\user\Documents\GitHub\life_simulator\main.py", line 51, in start
if cursor.execute(f"SELECT id FROM users WHERE id = {ans.from_id}").fetchone() is None:
sqlite3.ProgrammingError: Recursive use of cursors not allowed.
[TIME 18:08:22]
[VKBottle] Polling successfully started. Press Ctrl+C to stop it [TIME 18:08:22]
C:\Users\user\Documents\GitHub>
import settings
from vkbottle import Bot, Message, keyboard, keyboard_gen
import sqlite3
import random as r
from threading import Thread
import vk_api
from vk_api.longpoll import VkLongPoll, VkEventType
from vk_api.utils import get_random_id
import time
import telebot
bot2 = telebot.TeleBot(settings.Telegram)
def globals():
global connection
global cursor
connection = sqlite3.connect('НЕТ', check_same_thread = False)
cursor = connection.cursor()
globals()
def give_user_information(id, info, table):
abc = cursor.execute("SELECT " + info + " FROM " + table + " WHERE id = " + str(id)).fetchone()[0]
connection.commit()
return abc
def give_user_information2(id, info, table):
response = cursor.execute(f"SELECT `{info}` FROM {table} WHERE uid = {id};").fetchone()
if response != None:
return str(response[0])
else:
return 'Ah, shit.'
def start(id):
uid = 0
try:
for value in cursor.execute("SELECT * FROM users"):
uid = uid + 1
except:
pass
cursor.execute(f"INSERT INTO users VALUES ({id}, {uid}, 0, 0, 1, 'Игрок', 0, 0, 0, 0, 0, {time.time()}, {time.time() + 10}, 1, 'Можете пользоваться ботом, напишите <<Начать>>');")
connection.commit()
return 1
bot = Bot(settings.VKtoken)
k1 =
pk1 =
mk1 =
waiting =
k1g = keyboard_gen(k1, one_time=True)
pk1g = keyboard_gen(pk1, one_time=True)
mk1g = keyboard_gen(mk1, one_time=False)
waitingg = keyboard_gen(waiting, one_time=False)
@bot.on.message(text="начать", lower=True)
async def start(ans: Message):
if cursor.execute(f"SELECT id FROM users WHERE id = {ans.from_id}").fetchone() is None:
pass
else:
if give_user_information(ans.from_id, 'step', 'users') == '0':
await ans('Приветствую тебя игрок, выбери своего персонажа:', keyboard=k1g)
@bot.on.message(text="помощь", lower=True)
async def start(ans: Message):
if cursor.execute(f"SELECT id FROM users WHERE id = {ans.from_id}").fetchone() is None:
pass
else:
if give_user_information(ans.from_id, 'step', 'users') == '0':
await ans('Приветствую тебя игрок, выбери своего персонажа:', keyboard=k1g)
@bot.on.message(text="программист", lower=True)
async def programmer1(ans: Message):
if cursor.execute(f"SELECT id FROM users WHERE id = {ans.from_id}").fetchone() is None:
await ans('Вы не зарегистрированы, попробуйте написать что-либо заного. \nЕсли это не поможет напишите [id5492204433|администратору], скорее всего на сервере произошли неполадки с одним блоком бота.')
else:
if give_user_information(ans.from_id, 'step', 'users') == '0':
await ans('Ты пошел спать так как на часах было 8:46.')
await ans('Ты проснулся и увидел что ты оказался в другом доме, что-то тут было не так.')
await ans('Ты дошел до двери и увидел записку "Привет! Это твой друг, мне нужно уходить из этого дома, теперь он твой.", это была записка от твоего друга Александра, что ты сделаешь?', keyboard=pk1g)
cursor.execute("UPDATE users SET step = 1.1 WHERE id = " + str(ans.from_id))
connection.commit()
else:
await ans('Ты уже выбрал персонажа')
@bot.on.message(text="останусь здесь", lower=True)
async def programmer2_1(ans: Message):
if cursor.execute(f"SELECT id FROM users WHERE id = {ans.from_id}").fetchone() is None:
await ans('Вы не зарегистрированы, попробуйте написать что-либо заного. \nЕсли это не поможет напишите [id5492204433|администратору], скорее всего на сервере произошли неполадки с одним блоком бота.')
else:
if give_user_information(ans.from_id, 'step', 'users') == '1.1':
await ans('', keyboard=pk2g)
cursor.execute("UPDATE users SET step = 1.2 WHERE id = " + str(ans.from_id))
connection.commit()
else:
await ans('Ты уже выбрал персонажа/выбираешь')
@bot.on.message(text="уйду", lower=True)
async def programmer2_2(ans: Message):
if cursor.execute(f"SELECT id FROM users WHERE id = {ans.from_id}").fetchone() is None:
await ans('Вы не зарегистрированы, попробуйте написать что-либо заного. \nЕсли это не поможет напишите [id5492204433|администратору], скорее всего на сервере произошли неполадки с одним блоком бота.')
else:
if give_user_information(ans.from_id, 'step', 'users') == '1.1':
await ans('Дверь закрыта, вы выломали окно, поранились и пошли домой.', keyboard=mk1g)
cursor.execute("UPDATE users SET step = "+str(r.randint(5, 10000000000))+" WHERE id = " + str(ans.from_id))
cursor.execute("UPDATE users SET menu = 1 WHERE id = " + str(ans.from_id))
cursor.execute("UPDATE users SET menupage = 2 WHERE id = " + str(ans.from_id))
connection.commit()
else:
await ans('Ты уже выбрал персонажа/выбираешь')
class give(Thread):
def __init__(self):
Thread.__init__(self)
def run(self):
while True:
try:
for i in range(999999):
self.balance = give_user_information2(i, 'gbes', 'users')
cursor.execute("UPDATE users SET balance = balance + "+str(self.balance)+" WHERE uid = " + str(i))
connection.commit()
except Exception as Exc:
time.sleep(1)
class timer(Thread):
def __init__(self):
Thread.__init__(self)
self.vk_session = vk_api.VkApi(token=settings.VKtoken2)
self.vk = self.vk_session.get_api()
self.uid = 0
def run(self):
while True:
try:
if cursor.execute(f"SELECT uid FROM users WHERE uid = "+str(self.uid)).fetchone() is None:
self.uid = 0
self.timer_status = give_user_information2(self.uid, 'timer', 'users')
self.timer_status = str(self.timer_status)
if self.timer_status == '1':
self.neded_time = give_user_information2(self.uid, 'nt', 'users')
self.time = give_user_information2(self.uid, 'time', 'users')
if float(self.neded_time) <= float(self.time):
self.vk.messages.send(
message=give_user_information2(self.uid, 'timer_text', 'users'),
peer_id=give_user_information2(self.uid, 'id', 'users'),
random_id=get_random_id()
)
cursor.execute("UPDATE users SET timer = 0 WHERE uid = " + str(self.uid))
connection.commit()
elif self.timer_status == 'Ah, shit.':
self.time.time()
cursor.execute("UPDATE users SET time = "+str(time.time())+" WHERE uid = " + str(self.uid))
connection.commit()
self.uid += 1
except Exception as Ex:
pass
class start(Thread):
def __init__(self):
Thread.__init__(self)
self.vk_session = vk_api.VkApi(token=settings.VKtoken3)
self.vk = self.vk_session.get_api()
self.longpoll = VkLongPoll(self.vk_session)
def run(self):
while True:
try:
for event in self.longpoll.listen():
user_id = str(event.user_id)
if cursor.execute(f"SELECT id FROM users WHERE id = "+str(event.user_id)).fetchone() is None:
self.a = start(event.user_id)
self.vk.messages.send(message='Через 10 секунд вы должны получить сообщение, если оно не прийдет в течении 1 минуты - не пользуйтесь ботом.', user_id=user_id, random_id=get_random_id())
else:
pass
except Exception as Exc:
bot2.send_message(973302492, str(Exc))
c1 = give()
c2 = timer()
c3 = start()
c1.start()
c2.start()
c3.start()
bot.run_polling(skip_updates=False)
Answer the question
In order to leave comments, you need to log in
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question