T
T
Timtaran2020-08-20 16:15:09
Python
Timtaran, 2020-08-20 16:15:09

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>

The code:

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

1 answer(s)
S
SKEPTIC, 2020-08-20
@Timtaran

Because you are a nagovodil

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question