Add link_imessage management script
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
"""Link an iMessage phone number to an existing user account.
|
||||
|
||||
Usage:
|
||||
python scripts/link_imessage.py <username_or_email> <phone_number>
|
||||
python scripts/link_imessage.py ryan +15551234567
|
||||
|
||||
Run inside Docker:
|
||||
docker compose exec raggr python scripts/link_imessage.py ryan +15551234567
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
import asyncio
|
||||
|
||||
from dotenv import load_dotenv
|
||||
from tortoise import Tortoise
|
||||
|
||||
from blueprints.users.models import User
|
||||
|
||||
load_dotenv()
|
||||
|
||||
DATABASE_URL = os.getenv("DATABASE_URL", "sqlite://database/raggr.db")
|
||||
|
||||
|
||||
async def link_imessage(identifier: str, phone_number: str):
|
||||
await Tortoise.init(
|
||||
db_url=DATABASE_URL,
|
||||
modules={
|
||||
"models": [
|
||||
"blueprints.users.models",
|
||||
"blueprints.conversation.models",
|
||||
]
|
||||
},
|
||||
)
|
||||
|
||||
try:
|
||||
user = await User.filter(username=identifier).first()
|
||||
if not user:
|
||||
user = await User.filter(email=identifier).first()
|
||||
if not user:
|
||||
print(f"Error: No user found with username or email '{identifier}'")
|
||||
return False
|
||||
|
||||
conflict = (
|
||||
await User.filter(imessage_number=phone_number).exclude(id=user.id).first()
|
||||
)
|
||||
if conflict:
|
||||
print(
|
||||
f"Error: {phone_number} is already linked to user '{conflict.username}'"
|
||||
)
|
||||
return False
|
||||
|
||||
user.imessage_number = phone_number
|
||||
await user.save()
|
||||
print(f"Linked {phone_number} to user '{user.username}' ({user.email})")
|
||||
return True
|
||||
|
||||
finally:
|
||||
await Tortoise.close_connections()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) != 3:
|
||||
print(
|
||||
"Usage: python scripts/link_imessage.py <username_or_email> <phone_number>"
|
||||
)
|
||||
sys.exit(1)
|
||||
|
||||
success = asyncio.run(link_imessage(sys.argv[1], sys.argv[2]))
|
||||
sys.exit(0 if success else 1)
|
||||
Reference in New Issue
Block a user