Ошибка телграмм бота на 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())