Our own BotFather. A bot made here works with the same code as a Telegram bot - only the address changes (see "Connect a bot's code" below).
Token for - shown only now. Keep it secret: anyone with it can post as the bot.
Connect a bot's code
Telegram bots talk to https://api.telegram.org/bot<TOKEN>/.... Here it is:
So in the bot's code change the address and put in the new token:
# python-telegram-bot
Application.builder().token(TOKEN).base_url("/bot").base_file_url("/file/bot")
# aiogram
Bot(TOKEN, session=AiohttpSession(api=TelegramAPIServer.from_base("")))
# pyTelegramBotAPI
telebot.apihelper.API_URL = "/bot{0}/{1}"
// node-telegram-bot-api
new TelegramBot(TOKEN, { polling: true, baseApiUrl: "" })
// Telegraf
new Telegraf(TOKEN, { telegram: { apiRoot: "" } })
// grammY
new Bot(TOKEN, { client: { apiRoot: "" } })
Works: messages, photos, files, voice, location, buttons under messages (and their answers), editing, deleting, getUpdates and webhooks, /commands. Bots can't be copied out of Telegram itself - their code is what moves.
Add the bot to a group like a person (group info → Add members). In groups a bot only sees /commands, @mentions of it and replies to it - unless "Sees all group messages" is on.