Пишу тг бота на aiogram3, не могу сделать реферальную систему
Написал данный код, но мне нужно чтобы бот отправлял сообщение не на команду /start, а на инлайн кнопку.Помогите пожалуйста!
import asyncio
from aiogram import Dispatcher
from aiogram import Bot
from aiogram.client.bot import DefaultBotProperties
from aiogram.enums import ParseMode
from aiogram.utils.deep_linking import create_start_link, decode_payload
from aiogram import types
from aiogram.filters import CommandStart
BOT_TOKEN = ('')
dp = Dispatcher()
@dp.message(CommandStart)
async def referral(message: types.Message):
if len(message.text.split()) >= 2:
referrer_id = decode_payload(message.text.split()[1])
await message.answer(f'Вы были приглашены пользователем с ID {referrer_id}.')
# Send a message to the referrer
await bot.send_message(referrer_id, f'Пользователь с ID {message.from_user.id} присоединился по вашей реферальной ссылке.')
else:
link = await create_start_link(bot, str(message.from_user.id), encode=True)
await message.answer(f'Ваша пригласительная ссылка: {link}')
if __name__ == '__main__':
bot = Bot(BOT_TOKEN, default=DefaultBotProperties(parse_mode=ParseMode.HTML))
asyncio.run(dp.start_polling(bot))
Вот для Inline клавиатуры:
@dp.callback_query(lambda c: c.data == 'a1')
async def referral(callback: types.CallbackQuery):
if len(callback.text.split()) >= 2:
referrer_id = decode_payload(callback.text.split()[1])
await callback.message.answer(f'Вы были приглашены пользователем с ID {referrer_id}.')
# Send a message to the referrer
await bot.send_message(referrer_id, f'Пользователь с ID {callback.from_user.id} присоединился по вашей реферальной ссылке.')
else:
link = await create_start_link(bot, str(callback.from_user.id), encode=True)
await callback.message.answer(f'Ваша пригласительная ссылка: {link}')
Выводит ошибку:
in __getattr__
raise AttributeError(f'{type(self).__name__!r} object has no attribute {item!r}') from exc
AttributeError: 'CallbackQuery' object has no attribute 'text'
Ответы (1 шт):
Автор решения: tiovi
→ Ссылка
Так обрабатывайте ‘callback’, а не ‘CommandStart’. Ознакомьтесь более детально с библиотекой ‘aiogram’