43 lines
1.4 KiB
Python
43 lines
1.4 KiB
Python
|
from typing import Union
|
||
|
|
||
|
from tenacity import retry, stop_after_attempt
|
||
|
|
||
|
from core.elements import MessageSession
|
||
|
from database import session, auto_rollback_error
|
||
|
from .orm import ArcBindInfo
|
||
|
|
||
|
|
||
|
class ArcBindInfoManager:
|
||
|
@retry(stop=stop_after_attempt(3), reraise=True)
|
||
|
@auto_rollback_error
|
||
|
def __init__(self, msg: MessageSession):
|
||
|
self.targetId = msg.target.senderId
|
||
|
self.query = session.query(ArcBindInfo).filter_by(targetId=self.targetId).first()
|
||
|
if self.query is None:
|
||
|
session.add_all([ArcBindInfo(targetId=self.targetId, username='', friendcode='')])
|
||
|
session.commit()
|
||
|
self.query = session.query(ArcBindInfo).filter_by(targetId=self.targetId).first()
|
||
|
|
||
|
@retry(stop=stop_after_attempt(3), reraise=True)
|
||
|
@auto_rollback_error
|
||
|
def get_bind_friendcode(self) -> Union[str, None]:
|
||
|
bind_info = self.query.friendcode
|
||
|
if bind_info != '':
|
||
|
return bind_info
|
||
|
return None
|
||
|
|
||
|
@retry(stop=stop_after_attempt(3), reraise=True)
|
||
|
@auto_rollback_error
|
||
|
def set_bind_info(self, username, friendcode):
|
||
|
self.query.username = username
|
||
|
self.query.friendcode = friendcode
|
||
|
session.commit()
|
||
|
return True
|
||
|
|
||
|
@retry(stop=stop_after_attempt(3), reraise=True)
|
||
|
@auto_rollback_error
|
||
|
def remove_bind_info(self):
|
||
|
session.delete(self.query)
|
||
|
session.commit()
|
||
|
return True
|