Как пересылать определённые посты из собственного Telegram-канала от бота в ЛС пользователю?
Доброго времени суток всем читающим!
При разработке проекта, столкнулся с такой проблемой, как пересылка постов из своего Telegram-канала в ЛС пользователю.
Необходимо сделать таким образом, чтобы при публикации нового поста в канале, он дублировался в ЛС пользователю.
Было бы замечательно, если подскажите как сделать так, чтобы пользователю отсылались лишь определённые посты и функцию на отправка случайных постов из канала при взаимодействии с кнопки.
Допустим, чтобы детям отсылались лишь посты в ЛС, где в начале указан эмодзи "✔".
1. Сделать хендлер/хендлеры в которых будут применены нужные фильтры, типа «отсылались лишь посты в ЛС, где в начале указан эмодзи "✔"».
2. Сделать список юзеров, которым бот будет отправлять сообщения. Внутри хендлера сделать цикл с отправкой сообщений всем юзерам из списка.
Учесть, что для пункта 1 бот должен быть в канале, иначе он не сможет видеть посты канала. Учесть, что для пункта 2 юзеры должны предварительно взаимодействовать с ботом, иначе он не сможет отправить сообщение.
На счёт кнопки вообще не понял.
Лучше всего, покажите тот код, который у вас есть на данном этапе.
TheVladokSup, ну, тут смотря от имени кого вы хотите отправлять пост - от имени бота или от юзера (от своего, допустим). От бота советую aiogram, от юзера telethon
TheVladokSup, тогда смотрите: те, кому вы хотите пересылать сообщения обязаны сначала начать диалог с ботом самостоятельно, командой /start, без нее вы не сможете пересылать им сообщения, так как ботам запрещено писать пользователям, не начавшими с ними диалог. В этом случае советую все таки от юзера, но код бота я вам написал:
from aiogram import Bot, Dispatcher, executor, types
bot = Bot(token = 'токен бота')
dp = Dispatcher(bot)
channelTitle = 'Название канала'
users = [айди юзеров, которым вы хотите отправлять сообщения]
@dp.message_handler(commands = 'start')
async def start(message: types.Message):
await bot.send_message(
message.from_user.id,
'Бот запущен!'
)
@dp.channel_post_handler(content_types = ['text'])
async def cpHandler(post: types.Message):
if not post.text.startswith('✔') or post.sender_chat.title != channelTitle:
return
for user in users:
await bot.forward_message(
chat_id = user,
from_chat_id = post.sender_chat.id,
message_id = post.message_id
)
executor.start_polling(dp, skip_updates = True)
Самое главное: бот может читать сообщения из канала, только если туда добавил его администратор и дал доступ к сообщениям. Значения переменных замените на свои
TheVladokSup, конечно есть, но я вам писал, что пользователь обязан начать диалог с ботом, а так список айдишников пользователей в канале можете получить с помощью
members = await bot.get_chat_members(chatId) # можно получить из channel_post_handler - post.sender_chat.id
uids = [member.user.id for member in members]