- Updated .env.example with new Telegram API credentials and session string options. - Expanded .gitignore to exclude session files and configuration. - Refactored main.py to support string session authentication and added new functions for contact and message management. - Updated README.md to reflect new features, installation instructions, and usage examples. - Added python-dotenv as a dependency in pyproject.toml for environment variable management.
91 lines
No EOL
3.5 KiB
Python
Executable file
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) |