connectd/haos-addon/setup_user.py
Your Name 03338f6000 v1.1.0: HOST_USER auto-discovery, countdown timers, HAOS add-on
- add HOST_USER env var for auto-discovery from github
- merge HOST_* env vars with scraped profile data
- fix countdown timers to use started_at when no cycles run
- add lemmy, discord, bluesky fields to priority_users
- expand API user endpoint with all platform handles
- update HA sensor with full user profile attributes
- add HAOS add-on structure for one-click install
- update version to 1.1.0

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-15 11:04:55 -06:00

143 lines
4.6 KiB
Python

#!/usr/bin/env python3
"""
setup priority user - add yourself to get matches
usage:
python setup_user.py # interactive setup
python setup_user.py --show # show your profile
python setup_user.py --matches # show your matches
"""
import argparse
import json
from db import Database
from db.users import (init_users_table, add_priority_user, get_priority_users,
get_priority_user_matches)
def interactive_setup(db):
"""interactive priority user setup"""
print("=" * 60)
print("connectd priority user setup")
print("=" * 60)
print("\nlink your profiles so connectd can find matches for YOU\n")
name = input("name: ").strip()
email = input("email (for notifications): ").strip()
github = input("github username (optional): ").strip() or None
reddit = input("reddit username (optional): ").strip() or None
mastodon = input("mastodon handle e.g. user@instance (optional): ").strip() or None
lobsters = input("lobste.rs username (optional): ").strip() or None
matrix = input("matrix id e.g. @user:matrix.org (optional): ").strip() or None
location = input("location (e.g. seattle, remote): ").strip() or None
print("\nwhat are you interested in? (comma separated)")
print("examples: self-hosting, cooperatives, solarpunk, home automation")
interests_raw = input("interests: ").strip()
interests = [i.strip() for i in interests_raw.split(',')] if interests_raw else []
print("\nwhat kind of people are you looking to connect with?")
looking_for = input("looking for: ").strip() or None
user_data = {
'name': name,
'email': email,
'github': github,
'reddit': reddit,
'mastodon': mastodon,
'lobsters': lobsters,
'matrix': matrix,
'location': location,
'interests': interests,
'looking_for': looking_for,
}
user_id = add_priority_user(db.conn, user_data)
print(f"\n✓ added as priority user #{user_id}")
print("connectd will now find matches for you")
def show_profile(db):
"""show current priority user profile"""
users = get_priority_users(db.conn)
if not users:
print("no priority users configured")
print("run: python setup_user.py")
return
for user in users:
print("=" * 60)
print(f"priority user #{user['id']}: {user['name']}")
print("=" * 60)
print(f"email: {user['email']}")
if user['github']:
print(f"github: {user['github']}")
if user['reddit']:
print(f"reddit: {user['reddit']}")
if user['mastodon']:
print(f"mastodon: {user['mastodon']}")
if user['lobsters']:
print(f"lobsters: {user['lobsters']}")
if user['matrix']:
print(f"matrix: {user['matrix']}")
if user['location']:
print(f"location: {user['location']}")
if user['interests']:
interests = json.loads(user['interests']) if isinstance(user['interests'], str) else user['interests']
print(f"interests: {', '.join(interests)}")
if user['looking_for']:
print(f"looking for: {user['looking_for']}")
def show_matches(db):
"""show matches for priority user"""
users = get_priority_users(db.conn)
if not users:
print("no priority users configured")
return
for user in users:
print(f"\n=== matches for {user['name']} ===\n")
matches = get_priority_user_matches(db.conn, user['id'], limit=20)
if not matches:
print("no matches yet - run the daemon to discover people")
continue
for i, match in enumerate(matches, 1):
print(f"{i}. {match['username']} ({match['platform']})")
print(f" score: {match['overlap_score']:.0f}")
print(f" url: {match['url']}")
reasons = match.get('overlap_reasons', '[]')
if isinstance(reasons, str):
reasons = json.loads(reasons)
if reasons:
print(f" why: {reasons[0] if reasons else ''}")
print()
def main():
parser = argparse.ArgumentParser(description='setup priority user')
parser.add_argument('--show', action='store_true', help='show your profile')
parser.add_argument('--matches', action='store_true', help='show your matches')
args = parser.parse_args()
db = Database()
init_users_table(db.conn)
if args.show:
show_profile(db)
elif args.matches:
show_matches(db)
else:
interactive_setup(db)
db.close()
if __name__ == '__main__':
main()