Ошибка телграмм бота на aiogram 3

Обновил версию Aiogram до 3! Появилась ошибка

    Traceback (most recent call last):
  File "C:\Users\vinto\PycharmProjects\CydoCoinGame\main.py", line 14, in <module>
    dp = Dispatcher(bot)
         ^^^^^^^^^^^^^^^
TypeError: Dispatcher.__init__() takes 1 positional argument but 2 were given

Код проекта

    import asyncio
import logging
from aiogram import Bot, Dispatcher, types
from aiogram.types.web_app_info import WebAppInfo
from aiogram.types import Message

import config as cfg
from db import Database

logging.basicConfig(level=logging.INFO)


bot = Bot(token=cfg.TOKEN)
dp = Dispatcher(bot)

db = Database('database.db')
photo = open('cydo-coin.jpg', 'rb')

async def main():
    await bot.delete_webhook(drop_pending_updates=True)
    await dp.start_polling(bot)


@dp.message_handler(commands=['start'])
async def start(message: types.Message):
    if message.chat.type == 'private':
        if not db.user_exists(message.from_user.id):
            start_command = message.text
            referrer_id = str(start_command[7:])
            if str(referrer_id) != "":
                if str(referrer_id) != str(message.from_user.id):
                    db.add_user(message.from_user.id, referrer_id)
                    try:
                        await bot.send_message(referrer_id,
                                               "По вашей реферальной ссылке, вошел в систему новый пользователь!")
                    except:
                        pass
                else:
                    db.add_user(message.from_user.id)
                    await bot.send_message(message.from_user.id,
                                           "Нельзя войти в систему по своей же реферальной ссылке!")
            else:
                db.add_user(message.from_user.id)

        inline_btn_1 = types.InlineKeyboardMarkup()
        inline_btn_1.add(types.InlineKeyboardButton('Start', web_app=WebAppInfo(upl='https://forum.baltic.anight.space/TelegramCydo_test')))

        await message.answer("Hello!", reply_markup=inline_btn_1)


@dp.message_handler()
async def bot_message(message: types.Message):
    if message.chat.type == "private":
        if message.text == "/ref":
            await bot.send_message(message.from_user.id,
                                   f"Ваш id аккаунта: {message.from_user.id}\nhttps://t.me/{cfg.BOT_NICKNAME}?start={message.from_user.id}\nКол-во рефералов: {db.count_reeferals(message.from_user.id)}\nКол-во $CYDO: {db.user_cydo(message.from_user.id)}")



if __name__ == '__main__':
   dp.start_polling(bot)

Помогите мне пожалуйста, как ее решить!


Ответы (1 шт):

Автор решения: Daniil K-R

В aiogram 3 изменилось примерно... ВСЁ, поэтому стоит прочитать их официальную статью: https://docs.aiogram.dev/en/latest/migration_2_to_3.html

Также можно посмотреть примеры в руководстве у Груши: https://mastergroosha.github.io/aiogram-3-guide/quickstart/

Вкратце, что нужно поменять:

...
from aiogram.filters import Command
...

bot = Bot(token=cfg.TOKEN)
dp = Dispatcher()


async def main():
    await bot.delete_webhook(drop_pending_updates=True)
    await dp.start_polling(bot)


@dp.message(Command('start'))
async def start(message: Message):
    ....


if __name__ == '__main__':
    asyncio.run(main())
→ Ссылка