Timtaran
@Timtaran
Начинающий программист.

Почему не работает бот вк?

После запуска бот стопается.
Посчитал что из-за ошибки бд, так как бд sqlite не любит разные соединения, перенёс все в один файл, та же ошибка, так же стопается:
[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 = [[{'type':'text', 'label':'Программист'}], [{'type':'text', 'label':'Азартный пацан'}]]
pk1 = [[{'type':'text', 'label':'Останусь здесь', 'color': 'positive'}], [{'type':'text', 'label':'Уйду', 'color':'negative'}]]
mk1 = [[{'type':'text', 'label':'Работать', 'color':'positive'}], [{'type':'text', 'label':'<--', 'color':'primary', 'payload':'page0'}, {'type':'text', 'label':'-->', 'color':'primary', 'payload':'page3'}]]
waiting = [[{'type':'text', 'label':'Статус'}]]
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)
  • Вопрос задан
  • 269 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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