autoreg-skills-max: initial public release (restored, redacted, hardened)
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
# StringSession Conversion
|
||||
|
||||
## The Problem
|
||||
SQLite-based Telethon sessions deadlock when accessed in parallel. The error:
|
||||
```
|
||||
sqlite3.OperationalError: database is locked
|
||||
```
|
||||
This happens because SQLite uses file-level locking. When multiple accounts try to connect simultaneously, the `.session` files lock each other out.
|
||||
|
||||
## The Fix: StringSession
|
||||
Convert ALL sessions to in-memory StringSession format stored in a single JSON file. No file locking, no database contention.
|
||||
|
||||
## Converter Script
|
||||
Located at: `C:\Users\User\Desktop\_PROJECTS\рассылка\session_converter.py`
|
||||
|
||||
### How It Works
|
||||
```python
|
||||
# For each .session file:
|
||||
client = TelegramClient(session_path, API_ID, API_HASH)
|
||||
await client.connect()
|
||||
ss = client.session.save() # Returns StringSession string
|
||||
string_sessions[phone] = ss
|
||||
await client.disconnect()
|
||||
```
|
||||
|
||||
### Output
|
||||
`generated/sessions_strings.json`:
|
||||
```json
|
||||
{
|
||||
"12894827641": "1AgAOMTQ5...",
|
||||
"14066141705": "1BQANOTE3...",
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
## Usage in Join Script
|
||||
```python
|
||||
# Load
|
||||
with open("generated/sessions_strings.json") as f:
|
||||
string_sessions = json.load(f)
|
||||
|
||||
# Use
|
||||
ss = string_sessions.get(phone) or string_sessions.get(name)
|
||||
if not ss:
|
||||
return {"status": "no_stringsession"}
|
||||
|
||||
client = TelegramClient(StringSession(ss), API_ID, API_HASH)
|
||||
await client.connect()
|
||||
```
|
||||
|
||||
## Conversion Results (2026-07-08)
|
||||
- 222 sessions converted
|
||||
- 137 new StringSessions created
|
||||
- 9 failures (corrupted sessions)
|
||||
|
||||
## Why NOT SQLite Retry
|
||||
- WAL mode doesn't fix parallel access
|
||||
- Retry with exponential backoff adds latency
|
||||
- Timeout-based retry still leaves windows for deadlock
|
||||
- StringSession is simpler, faster, and zero-lock
|
||||
|
||||
## Pitfalls
|
||||
- StringSession strings are long (~350 chars) — the JSON file can be large
|
||||
- Invalid/corrupted .session files will fail conversion silently
|
||||
- Some accounts may have both .session and StringSession — prefer StringSession
|
||||
- The `generated/sessions_strings.json` file should be backed up before mass operations
|
||||
Reference in New Issue
Block a user