telegram-mcp/session_string_generator.py
anonim ecb5b88b12 feat: enhance Telegram MCP server with new features and improvements
- Added support for string session authentication in main.py.
- Introduced new tools for searching contacts and retrieving message context.
- Updated README.md with detailed usage examples and security considerations.
- Modified pyproject.toml for versioning and dependency updates.
- Expanded .gitignore to include Telegram session files.
2025-03-31 19:11:07 +03:00

91 lines
No EOL
3.5 KiB
Python
Executable file

#!/usr/bin/env python3
"""
Telegram Session String Generator
This script generates a session string that can be used for Telegram authentication
with the Telegram MCP server. The session string allows for portable authentication
without storing session files.
Usage:
python session_string_generator.py
Requirements:
- telethon
- python-dotenv
"""
import os
from telethon.sync import TelegramClient
from telethon.sessions import StringSession
from dotenv import load_dotenv
import sys
# Load environment variables from .env file
load_dotenv()
API_ID = os.getenv("TELEGRAM_API_ID")
API_HASH = os.getenv("TELEGRAM_API_HASH")
if not API_ID or not API_HASH:
print("Error: TELEGRAM_API_ID and TELEGRAM_API_HASH must be set in .env file")
print("Create an .env file with your credentials from https://my.telegram.org/apps")
sys.exit(1)
# Convert API_ID to integer
try:
API_ID = int(API_ID)
except ValueError:
print("Error: TELEGRAM_API_ID must be an integer")
sys.exit(1)
print("\n----- Telegram Session String Generator -----\n")
print("This script will generate a session string for your Telegram account.")
print("You will be asked to enter your phone number and the verification code sent to your Telegram app.")
print("The generated session string can be added to your .env file.")
print("\nYour credentials will NOT be stored on any server and are only used for local authentication.\n")
try:
# Connect to Telegram and generate the session string
with TelegramClient(StringSession(), API_ID, API_HASH) as client:
# The client.session.save() function from StringSession returns the session string
session_string = StringSession.save(client.session)
print("\nAuthentication successful!")
print("\n----- Your Session String -----")
print(f"\n{session_string}\n")
print("Add this to your .env file as:")
print(f"TELEGRAM_SESSION_STRING={session_string}")
print("\nIMPORTANT: Keep this string private and never share it with anyone!")
# Optional: auto-update the .env file
choice = input("\nWould you like to automatically update your .env file with this session string? (y/N): ")
if choice.lower() == 'y':
try:
# Read the current .env file
with open('.env', 'r') as file:
env_contents = file.readlines()
# Update or add the SESSION_STRING line
session_string_line_found = False
for i, line in enumerate(env_contents):
if line.startswith('TELEGRAM_SESSION_STRING='):
env_contents[i] = f"TELEGRAM_SESSION_STRING={session_string}\n"
session_string_line_found = True
break
if not session_string_line_found:
env_contents.append(f"TELEGRAM_SESSION_STRING={session_string}\n")
# Write back to the .env file
with open('.env', 'w') as file:
file.writelines(env_contents)
print("\n.env file updated successfully!")
except Exception as e:
print(f"\nError updating .env file: {e}")
print("Please manually add the session string to your .env file.")
except Exception as e:
print(f"\nError: {e}")
print("Failed to generate session string. Please try again.")
sys.exit(1)