如何基于aiogram 3.10在频道中发送模糊付费媒体?
在Telegram频道发送带模糊效果的付费媒体解决方案
问题
需要在Telegram频道发送带有模糊(剧透)效果的付费媒体,当前代码未实现该效果。
原代码
import asyncio import logging from aiogram import Bot, Dispatcher from aiogram.filters import CommandStart from aiogram.types import Message, InputPaidMediaPhoto TOKEN = "qqqqqqqqqqqqqqqqqqqqqqqqqqqqqq" PHOTO_URL = 'https://i.imgur.com/i2CvF2q.jpeg' logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) bot = Bot(token=TOKEN) dp = Dispatcher() @dp.message(CommandStart()) async def command_start(message: Message): await message.answer_paid_media(star_count=500, media=[InputPaidMediaPhoto(media=PHOTO_URL)]) async def main(): await dp.start_polling(bot) if __name__ == '__main__': asyncio.run(main())
解决方案
要实现模糊效果,需利用InputPaidMediaPhoto的has_spoiler参数,同时调整发送逻辑以指向目标频道:
修改后的代码
import asyncio import logging from aiogram import Bot, Dispatcher from aiogram.filters import CommandStart from aiogram.types import Message, InputPaidMediaPhoto TOKEN = "你的机器人令牌" CHANNEL_ID = "-100XXXXXXXXXX" # 替换为实际频道ID PHOTO_URL = 'https://i.imgur.com/i2CvF2q.jpeg' logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) bot = Bot(token=TOKEN) dp = Dispatcher() @dp.message(CommandStart()) async def command_start(message: Message): # 向指定频道发送带模糊效果的付费媒体 await bot.send_paid_media( chat_id=CHANNEL_ID, star_count=500, media=[InputPaidMediaPhoto(media=PHOTO_URL, has_spoiler=True)] ) await message.answer("已完成频道付费媒体发送") async def main(): await dp.start_polling(bot) if __name__ == '__main__': asyncio.run(main())
关键说明
- 模糊效果开启:给
InputPaidMediaPhoto添加has_spoiler=True参数,媒体会默认模糊显示,用户点击后才会清晰展示。 - 频道发送逻辑:使用
bot.send_paid_media并指定chat_id为频道ID(格式为-100开头的数字ID),而非回复私聊消息的message.answer_paid_media。 - 权限准备:确保机器人是目标频道的管理员,拥有发布消息的权限。
内容的提问来源于stack exchange,提问作者WinnieNotThePooh
相关产品推荐
相关产品推荐

