1) Для начала конфигурируем бота в BotFather и даем ему возможность читать сообщения в каналах:
Выбираем в BotFather нужного бота затем Bot Settings -> Group Privacy.
Ура, теперь бот может читать сообщения!
2) Добавляем его в канал, и он по умолчанию добавляется администратором, если же нет, то сами делаем его администратором.
3) Добавляем пригласительную ссылку с заявкой в канал:
Управление канала -> Пригласительные ссылки -> Создать новую ссылку (и не забываем поставить галочку возле "Заявка на вступление")
4) Вот простой код, как это может быть реализовано через pyTelegramBotApi на Python (кроме него ничего, к сожалению, не знаю, но принцип такой):
import telebot
TOKEN = 'Токен'
bot = telebot.TeleBot(TOKEN)
@bot.chat_join_request_handler()
def lalala(message: telebot.types.ChatJoinRequest):
bot.send_message(message.from_user.id, "Hello, my friend!")
#отправляем пользователю сообщение от имени бота
bot.infinity_polling(allowed_updates = telebot.util.update_types)
Однако стоит заметить, что бот напишет в том случае, если пользователь отправит заявку, хотя пользователь не отправлял /start
Возможно стоит посмотреть API types у телеграмных ботов здесь:
https://core.telegram.org/bots/api#update