Permalink
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
python-telegram-bot/examples/inlinebot.py
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
106 lines (83 sloc)
3.44 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# pylint: disable=unused-argument, wrong-import-position | |
# This program is dedicated to the public domain under the CC0 license. | |
""" | |
Don't forget to enable inline mode with @BotFather | |
First, a few handler functions are defined. Then, those functions are passed to | |
the Application and registered at their respective places. | |
Then, the bot is started and runs until we press Ctrl-C on the command line. | |
Usage: | |
Basic inline bot example. Applies different text transformations. | |
Press Ctrl-C on the command line or send a signal to the process to stop the | |
bot. | |
""" | |
import logging | |
from html import escape | |
from uuid import uuid4 | |
from telegram import __version__ as TG_VER | |
try: | |
from telegram import __version_info__ | |
except ImportError: | |
__version_info__ = (0, 0, 0, 0, 0) # type: ignore[assignment] | |
if __version_info__ < (20, 0, 0, "alpha", 1): | |
raise RuntimeError( | |
f"This example is not compatible with your current PTB version {TG_VER}. To view the " | |
f"{TG_VER} version of this example, " | |
f"visit https://docs.python-telegram-bot.org/en/v{TG_VER}/examples.html" | |
) | |
from telegram import InlineQueryResultArticle, InputTextMessageContent, Update | |
from telegram.constants import ParseMode | |
from telegram.ext import Application, CommandHandler, ContextTypes, InlineQueryHandler | |
# Enable logging | |
logging.basicConfig( | |
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", level=logging.INFO | |
) | |
logger = logging.getLogger(__name__) | |
# Define a few command handlers. These usually take the two arguments update and | |
# context. | |
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: | |
"""Send a message when the command /start is issued.""" | |
await update.message.reply_text("Hi!") | |
async def help_command(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: | |
"""Send a message when the command /help is issued.""" | |
await update.message.reply_text("Help!") | |
async def inline_query(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: | |
"""Handle the inline query. This is run when you type: @botusername <query>""" | |
query = update.inline_query.query | |
if query == "": | |
return | |
results = [ | |
InlineQueryResultArticle( | |
id=str(uuid4()), | |
title="Caps", | |
input_message_content=InputTextMessageContent(query.upper()), | |
), | |
InlineQueryResultArticle( | |
id=str(uuid4()), | |
title="Bold", | |
input_message_content=InputTextMessageContent( | |
f"<b>{escape(query)}</b>", parse_mode=ParseMode.HTML | |
), | |
), | |
InlineQueryResultArticle( | |
id=str(uuid4()), | |
title="Italic", | |
input_message_content=InputTextMessageContent( | |
f"<i>{escape(query)}</i>", parse_mode=ParseMode.HTML | |
), | |
), | |
] | |
await update.inline_query.answer(results) | |
def main() -> None: | |
"""Run the bot.""" | |
# Create the Application and pass it your bot's token. | |
application = Application.builder().token("TOKEN").build() | |
# on different commands - answer in Telegram | |
application.add_handler(CommandHandler("start", start)) | |
application.add_handler(CommandHandler("help", help_command)) | |
# on non command i.e message - echo the message on Telegram | |
application.add_handler(InlineQueryHandler(inline_query)) | |
# Run the bot until the user presses Ctrl-C | |
application.run_polling() | |
if __name__ == "__main__": | |
main() |