Переписываю бота с aiogram2 на aiogram3. Вылазит ошибка:
Вот код:
import logging
from aiogram import Bot, Dispatcher, types
import keyboard as kb
import functions as func
import sys
import asyncio
import sqlite3
from aiogram.fsm.storage.memory import MemoryStorage
from aiogram.fsm.context import FSMContext
from aiogram.fsm.state import State, StatesGroup
from aiogram.enums import ParseMode
from aiogram.client.bot import DefaultBotProperties
from aiogram.filters import CommandStart
from aiogram import F
from aiogram import BaseMiddleware
API_TOKEN = ("")
admin = {'айди_админа1, айди_админа2,'}
storage = MemoryStorage()
logging.basicConfig(level=logging.INFO)
# bot = Bot(token=API_TOKEN)
dp = Dispatcher(storage=storage) #bot,
connection = sqlite3.connect('data.db')
q = connection.cursor()
class st(StatesGroup):
item = State()
item2 = State()
item3 = State()
item4 = State()
@dp.message(CommandStart('start'))
async def start(message: types.Message):
func.join(chat_id=message.chat.id)
q.execute(f"SELECT block FROM users WHERE user_id = {message.chat.id}")
result = q.fetchone()
if result[0] == 0:
if message.chat.id in admin:
await message.answer('Добро пожаловать, админ', reply_markup=kb.menu)
else:
await message.answer('Приветствую, это бот-саппорт.\nНапиши мне свой вопрос администрации Punisher Tool.\nЗа спам/флуд - ЧС!')
else:
await message.answer('Nothing, try again')
@dp.message(F.text.lower() == '? Админка')
async def handfler(message: types.Message, state: FSMContext):
func.join(chat_id=message.chat.id)
q.execute(f"SELECT block FROM users WHERE user_id = {message.chat.id}")
result = q.fetchone()
if result[0] == 0:
if message.chat.id in admin:
await message.answer('Добро пожаловать в админ-панель.', reply_markup=kb.adm)
@dp.message(F.text.lower() == '⏪ Назад')
async def handledr(message: types.Message, state: FSMContext):
await message.answer('Добро пожаловать', reply_markup=kb.menu)
@dp.message(F.text.lower() == '? ЧС')
async def handlaer(message: types.Message, state: FSMContext):
func.join(chat_id=message.chat.id)
q.execute(f"SELECT block FROM users WHERE user_id = {message.chat.id}")
result = q.fetchone()
if result[0] == 0:
if message.chat.id in admin:
q.execute(f"SELECT * FROM users WHERE block == 1")
result = q.fetchall()
sl = []
for index in result:
i = index[0]
sl.append(i)
ids = '\n'.join(map(str, sl))
await message.answer(f'ID пользователей в ЧС:\n{ids}')
@dp.message(F.text.lower() == '✅ Добавить в ЧС')
async def hanadler(message: types.Message, state: FSMContext):
func.join(chat_id=message.chat.id)
q.execute(f"SELECT block FROM users WHERE user_id = {message.chat.id}")
result = q.fetchone()
if result[0] == 0:
if message.chat.id in admin:
await message.answer('Введите id пользователя, которого нужно заблокировать.\nДля отмены нажмите кнопку ниже', reply_markup=kb.back)
await st.item3.set()
@dp.message(F.text.lower() == '❎ Убрать из ЧС')
async def hfandler(message: types.Message, state: FSMContext):
func.join(chat_id=message.chat.id)
q.execute(f"SELECT block FROM users WHERE user_id = {message.chat.id}")
result = q.fetchone()
if result[0] == 0:
if message.chat.id in admin:
await message.answer('Введите id пользователя, которого нужно разблокировать.\nДля отмены нажмите кнопку ниже', reply_markup=kb.back)
await st.item4.set()
@dp.message(F.text.lower() == '? Рассылка')
async def hangdler(message: types.Message, state: FSMContext):
func.join(chat_id=message.chat.id)
q.execute(f"SELECT block FROM users WHERE user_id = {message.chat.id}")
result = q.fetchone()
if result[0] == 0:
if message.chat.id in admin:
await message.answer('Введите текст для рассылки.\n\nДля отмены нажми блять на кнопку ниже', reply_markup=kb.back)
await st.item.set()
@dp.message()
async def h(message: types.Message, state: FSMContext):
func.join(chat_id=message.chat.id)
q.execute(f"SELECT block FROM users WHERE user_id = {message.chat.id}")
result = q.fetchone()
if result[0] == 0:
if message.chat.id in admin:
pass
else:
await message.answer('Сообщение отправлено.\n\nОжидайте ответа ~12 часов')
for admin_id in admin:
await bot.send_message(admin_id, f"<b>Получен новый вопрос!</b>\n<b>От:</b> {message.from_user.mention}\nID: {message.chat.id}\n<b>Сообщение:</b> {message.text}", reply_markup=kb.fun(message.chat.id), parse_mode='HTML')
else:
await message.answer('Ошибка.')
@dp.message(lambda call: True) # Inline часть
async def cal(call, state: FSMContext):
if 'ans' in call.data:
a = call.data.index('-ans')
ids = call.data[:a]
await call.message.answer('Введите ответ:', reply_markup=kb.back)
await st.item2.set() # админ отвечает пользователю
await state.update_data(uid=ids)
elif 'ignor' in call.data:
await call.answer('Удалено')
await bot.delete_message(call.message.chat.id, call.message.message_id)
await state.finish()
@dp.message() # state=st.item2
async def proc(message: types.Message, state: FSMContext):
if message.text == '⏪ Отмена':
await message.answer('Отмена! Возвращаю назад.', reply_markup=kb.menu)
await state.finish()
else:
await message.answer('Сообщение отправлено.', reply_markup=kb.menu)
data = await state.get_data()
id = data.get("uid")
await state.finish()
await bot.send_message(id, 'Вам поступил ответ от администратора!\n\nТекст: {}'.format(message.text))
@dp.message() # state=st.item
async def process_name(message: types.Message, state: FSMContext):
q.execute(f'SELECT user_id FROM users')
row = q.fetchall()
connection.commit()
text = message.text
if message.text == '⏪ Отмена':
await message.answer('Отмена! Возвращаю назад.', reply_markup=kb.adm)
await state.finish()
else:
info = row
await message.answer('Рассылка начата!', reply_markup=kb.adm)
for i in range(len(info)):
try:
await bot.send_message(info[i][0], str(text))
except:
pass
await message.answer(f'Рассылка завершена!\n\nВсего пользователей: {len(info)}.\nКоличество не доставленных сообщений: {len(info) - i}', reply_markup=kb.adm)
await state.finish()
@dp.message() # state=st.item3
async def proce(message: types.Message, state: FSMContext):
if message.text == '⏪ Отмена':
await message.answer('Отмена! Возвращаю назад.', reply_markup=kb.adm)
await state.finish()
else:
if message.text.isdigit():
q.execute(f"SELECT block FROM users WHERE user_id = {message.text}")
result = q.fetchall()
connection.commit()
if len(result) == 0:
await message.answer('Такой пользователь не найден в базе данных.', reply_markup=kb.adm)
await state.finish()
else:
a = result[0]
id = a[0]
if id == 0:
q.execute(f"UPDATE users SET block = 1 WHERE user_id = {message.text}")
connection.commit()
await message.answer('Пользователь успешно пошёл нахуй.', reply_markup=kb.adm)
await state.finish()
await bot.send_message(message.text, 'Ты получил пизды от администрации.\nБАН')
else:
await message.answer('Данный пользователь уже получил Хуй', reply_markup=kb.adm)
await state.finish()
else:
await message.answer('Эйй долбаёб!,Ты вводишь буквы...\nВведи ID')
@dp.message() # state=st.item4
async def proc(message: types.Message, state: FSMContext):
if message.text == '⏪ Отмена':
await message.answer('Отмена! Возвращаю назад.', reply_markup=kb.adm)
await state.finish()
else:
if message.text.isdigit():
q.execute(f"SELECT block FROM users WHERE user_id = {message.text}")
result = q.fetchall()
connection.commit()
if len(result) == 0:
await message.answer('Такой пользователь не найден в базе данных.', reply_markup=kb.adm)
await state.finish()
else:
a = result[0]
id = a[0]
if id == 1:
q.execute(f"UPDATE users SET block = 0 WHERE user_id = {message.text}")
connection.commit()
await message.answer('Пользователь успешно разбанен.', reply_markup=kb.adm)
await state.finish()
await bot.send_message(message.text, 'Вы были разблокированы администрацией.')
else:
await message.answer('Данный пользователь не получил пизду.', reply_markup=kb.adm)
await state.finish()
else:
await message.answer('Долбаёб,Ты вводишь буквы...\nВведи ID')
if __name__ == '__main__':
bot = Bot(API_TOKEN, default=DefaultBotProperties(parse_mode=ParseMode.HTML))
asyncio.run(dp.start_polling(bot))
Вот ошибка вылезает после нажатия кнопки start:
OperationalError: no such table: users
Traceback (most recent call last):
File "C:\Users\Татьяна\AppData\Local\Programs\Python\Python312\Lib\site-packages\aiogram\dispatcher\dispatcher.py", line 309, in _process_update
response = await self.feed_update(bot, update, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Татьяна\AppData\Local\Programs\Python\Python312\Lib\site-packages\aiogram\dispatcher\dispatcher.py", line 158, in feed_update
response = await self.update.wrap_outer_middleware(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Татьяна\AppData\Local\Programs\Python\Python312\Lib\site-packages\aiogram\dispatcher\middlewares\error.py", line 25, in __call__
return await handler(event, data)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Татьяна\AppData\Local\Programs\Python\Python312\Lib\site-packages\aiogram\dispatcher\middlewares\user_context.py", line 27, in __call__
return await handler(event, data)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Татьяна\AppData\Local\Programs\Python\Python312\Lib\site-packages\aiogram\fsm\middleware.py", line 41, in __call__
return await handler(event, data)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Татьяна\AppData\Local\Programs\Python\Python312\Lib\site-packages\aiogram\dispatcher\event\telegram.py", line 121, in trigger
return await wrapped_inner(event, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Татьяна\AppData\Local\Programs\Python\Python312\Lib\site-packages\aiogram\dispatcher\event\handler.py", line 43, in call
return await wrapped()
^^^^^^^^^^^^^^^
File "C:\Users\Татьяна\AppData\Local\Programs\Python\Python312\Lib\site-packages\aiogram\dispatcher\dispatcher.py", line 276, in _listen_update
return await self.propagate_event(update_type=update_type, event=event, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Татьяна\AppData\Local\Programs\Python\Python312\Lib\site-packages\aiogram\dispatcher\router.py", line 128, in propagate_event
return await observer.wrap_outer_middleware(_wrapped, event=event, data=kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Татьяна\AppData\Local\Programs\Python\Python312\Lib\site-packages\aiogram\dispatcher\router.py", line 123, in _wrapped
return await self._propagate_event(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Татьяна\AppData\Local\Programs\Python\Python312\Lib\site-packages\aiogram\dispatcher\router.py", line 148, in _propagate_event
response = await observer.trigger(event, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Татьяна\AppData\Local\Programs\Python\Python312\Lib\site-packages\aiogram\dispatcher\event\telegram.py", line 121, in trigger
return await wrapped_inner(event, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Татьяна\AppData\Local\Programs\Python\Python312\Lib\site-packages\aiogram\dispatcher\event\handler.py", line 43, in call
return await wrapped()
^^^^^^^^^^^^^^^
File "c:\Users\Татьяна\Desktop\2 mod.py\main.py", line 112, in h
func.join(chat_id=message.chat.id)
File "c:\Users\Татьяна\Desktop\2 mod.py\functions.py", line 9, in join
q.execute(f"SELECT * FROM users WHERE user_id = {chat_id}")
sqlite3.OperationalError: no such table: users