Last active
July 20, 2023 10:30
-
-
Save abhishtagatya/e33d2fff4224bde22b93c4a7ef745461 to your computer and use it in GitHub Desktop.
Telegram Chatbot using Jam
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
import os | |
import logging | |
from telegram import __version__ as TG_VER | |
from jam import Jam | |
from jam.personnel import AutoPersonnel | |
from jam.persistence import SQLitePersistence | |
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 ForceReply, Update | |
from telegram.ext import Application, CommandHandler, ContextTypes, MessageHandler, filters | |
# Enable logging | |
logging.basicConfig( | |
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", | |
level=logging.INFO) | |
# set higher logging level for httpx to avoid all GET and POST requests being logged | |
logging.getLogger("httpx").setLevel(logging.WARNING) | |
logger = logging.getLogger(__name__) | |
os.environ['OPENAI_KEY'] = '<OPENAI_TOKEN>' # From OpenAI API | |
os.environ['TELEGRAM_KEY'] = '<TELEGRAM_TOKEN>' # From BotFather | |
jam_room = Jam(members=[ | |
AutoPersonnel.from_prompt(uid='ricksanchez', prompt='Rick Sanchez'). | |
save_json() # Using GPT to build prompt | |
], persistence=SQLitePersistence()) | |
# 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.""" | |
user = update.effective_user | |
await update.message.reply_html( | |
rf"Hi {user.mention_html()}!", | |
reply_markup=ForceReply(selective=True), | |
) | |
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 generate(message: str, user_id: str): | |
global jam_room | |
prompt = jam_room.compose(message=message, multi=False, cid=user_id) | |
return prompt[0].content | |
async def speak(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: | |
"""Echo the user message.""" | |
user = update.message.from_user | |
message = update.message.text | |
response = await generate(message=message, user_id=str(user.id)) | |
await update.message.reply_text(response) | |
def main() -> None: | |
"""Start the bot.""" | |
# Create the Application and pass it your bot's token. | |
application = Application.builder().token(os.getenv('TELEGRAM_KEY', | |
'')).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( | |
MessageHandler(filters.TEXT & ~filters.COMMAND, speak)) | |
# Run the bot until the user presses Ctrl-C | |
application.run_polling(allowed_updates=Update.ALL_TYPES) | |
if __name__ == "__main__": | |
main() |
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
import logging | |
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 ForceReply, Update | |
from telegram.ext import Application, CommandHandler, ContextTypes, MessageHandler, filters | |
# Enable logging | |
logging.basicConfig( | |
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", level=logging.INFO | |
) | |
# set higher logging level for httpx to avoid all GET and POST requests being logged | |
logging.getLogger("httpx").setLevel(logging.WARNING) | |
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.""" | |
user = update.effective_user | |
await update.message.reply_html( | |
rf"Hi {user.mention_html()}!", | |
reply_markup=ForceReply(selective=True), | |
) | |
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 speak(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: | |
"""Echo the user message.""" | |
await update.message.reply_text(update.message.text) | |
def main() -> None: | |
"""Start 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(MessageHandler(filters.TEXT & ~filters.COMMAND, speak)) | |
# Run the bot until the user presses Ctrl-C | |
application.run_polling(allowed_updates=Update.ALL_TYPES) | |
if __name__ == "__main__": | |
main() |
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
python-telegram-bot | |
jam-ai | |
openai |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment