2026-04-04 12:53:02 +08:00
|
|
|
|
from django.contrib.auth.models import AbstractUser
|
2026-04-04 11:19:01 +08:00
|
|
|
|
from django.db import models
|
|
|
|
|
|
|
2026-04-04 12:53:02 +08:00
|
|
|
|
|
|
|
|
|
|
class User(AbstractUser):
|
|
|
|
|
|
"""扩展用户模型"""
|
|
|
|
|
|
email = models.EmailField(unique=True)
|
|
|
|
|
|
created_at = models.DateTimeField(auto_now_add=True)
|
|
|
|
|
|
|
|
|
|
|
|
# 绑定的龙虾列表(JSON 存储)
|
|
|
|
|
|
# 示例:[{"agent_id": "flying_hero", "agent_name": "飞行侠", "agent_emoji": "🦸", "instance_id": "phospher-openclaw"}]
|
|
|
|
|
|
linked_agents = models.JSONField(default=list, verbose_name='绑定的龙虾', blank=True)
|
|
|
|
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
|
db_table = 'users'
|
|
|
|
|
|
verbose_name = '用户'
|
|
|
|
|
|
verbose_name_plural = '用户'
|
|
|
|
|
|
# 避免与 auth.User 冲突
|
|
|
|
|
|
app_label = 'users'
|
|
|
|
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
|
|
return self.username
|
|
|
|
|
|
|
|
|
|
|
|
def add_linked_agent(self, agent_id: str, agent_name: str, agent_emoji: str = '🤖', instance_id: str = None):
|
|
|
|
|
|
"""添加绑定的龙虾"""
|
|
|
|
|
|
agent = {
|
|
|
|
|
|
'agent_id': agent_id,
|
|
|
|
|
|
'agent_name': agent_name,
|
|
|
|
|
|
'agent_emoji': agent_emoji,
|
|
|
|
|
|
'instance_id': instance_id
|
|
|
|
|
|
}
|
|
|
|
|
|
# 避免重复
|
|
|
|
|
|
for i, a in enumerate(self.linked_agents):
|
|
|
|
|
|
if a.get('agent_id') == agent_id:
|
|
|
|
|
|
self.linked_agents[i] = agent
|
|
|
|
|
|
return
|
|
|
|
|
|
self.linked_agents.append(agent)
|
|
|
|
|
|
self.save()
|
|
|
|
|
|
|
|
|
|
|
|
def remove_linked_agent(self, agent_id: str):
|
|
|
|
|
|
"""移除绑定的龙虾"""
|
|
|
|
|
|
self.linked_agents = [a for a in self.linked_agents if a.get('agent_id') != agent_id]
|
|
|
|
|
|
self.save()
|
|
|
|
|
|
|
|
|
|
|
|
def get_linked_agent(self, agent_id: str):
|
|
|
|
|
|
"""获取指定的龙虾信息"""
|
|
|
|
|
|
for agent in self.linked_agents:
|
|
|
|
|
|
if agent.get('agent_id') == agent_id:
|
|
|
|
|
|
return agent
|
|
|
|
|
|
return None
|