2023-12-20 20:47:07 +08:00
|
|
|
|
import secrets
|
|
|
|
|
|
2023-12-21 00:14:39 +08:00
|
|
|
|
from sanic import SanicException
|
|
|
|
|
|
|
|
|
|
from models import User, GiteaUser
|
2023-12-20 20:47:07 +08:00
|
|
|
|
from sio_model import SioDecorator, Message, SioRequest
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def cmds(app, data):
|
|
|
|
|
# 此处会检查注册的指令是否重复
|
|
|
|
|
sio_decorator = SioDecorator(app, data)
|
|
|
|
|
|
|
|
|
|
@sio_decorator.cmd('ping')
|
|
|
|
|
async def ping(sqt: SioRequest):
|
|
|
|
|
msg = Message(content='pong', room_id=sqt.room_id)
|
|
|
|
|
await sqt.app.ctx.sio.emit('sendMessage', msg.to_json())
|
|
|
|
|
|
|
|
|
|
@sio_decorator.cmd('gitea')
|
|
|
|
|
async def gitea(sqt: SioRequest):
|
|
|
|
|
parser = sqt.parser
|
|
|
|
|
parser.add_argument('-vd', '--validate', help='绑定QQ与gitea',
|
|
|
|
|
action="store_true")
|
2023-12-21 00:14:39 +08:00
|
|
|
|
parser.add_argument('-ust', '--ustatus', help='查询Gitea绑定状态',
|
|
|
|
|
action="store_true")
|
2023-12-20 20:47:07 +08:00
|
|
|
|
args = parser.parse_args(sqt.args)
|
|
|
|
|
if args.validate:
|
|
|
|
|
state = secrets.token_urlsafe(16)
|
|
|
|
|
user = await User.filter(id=sqt.sender_id).get_or_none()
|
|
|
|
|
if user:
|
|
|
|
|
user.name = sqt.sender_name
|
|
|
|
|
user.state = state
|
|
|
|
|
await user.save()
|
|
|
|
|
else:
|
|
|
|
|
user = User(id=sqt.sender_id, name=sqt.sender_name, state=state)
|
|
|
|
|
await user.save()
|
2023-12-20 23:29:54 +08:00
|
|
|
|
url = (f'{app.ctx.sio_config.gitea_host}/login/oauth/authorize?'
|
2023-12-20 20:47:07 +08:00
|
|
|
|
f'client_id={app.ctx.sio_config.client_id}&'
|
|
|
|
|
f'redirect_uri={app.ctx.sio_config.localhost}/redirect&'
|
|
|
|
|
f'response_type=code&state={state}')
|
|
|
|
|
msg = Message(content=f'click: \n{url}', room_id=sqt.room_id)
|
|
|
|
|
await sqt.app.ctx.sio.emit('sendMessage', msg.to_json())
|
2023-12-21 00:14:39 +08:00
|
|
|
|
|
|
|
|
|
if args.ustatus:
|
|
|
|
|
g_user = await GiteaUser.filter(qid_id=sqt.sender_id).get_or_none()
|
|
|
|
|
if g_user:
|
|
|
|
|
msg = Message(content=f'您的Gitea账号是:{g_user.name}', room_id=sqt.room_id)
|
|
|
|
|
else:
|
|
|
|
|
try:
|
|
|
|
|
task = await sqt.app.get_task(str(sqt.sender_id))
|
|
|
|
|
result = task.result()
|
|
|
|
|
msg = Message(content=f'绑定状态:{result}', room_id=sqt.room_id)
|
|
|
|
|
except SanicException:
|
|
|
|
|
msg = Message(content=f'你还没有绑定呢', room_id=sqt.room_id)
|
|
|
|
|
await sqt.app.ctx.sio.emit('sendMessage', msg.to_json())
|
|
|
|
|
|
2023-12-20 20:47:07 +08:00
|
|
|
|
if len(sqt.args) == 0:
|
|
|
|
|
parser.parse_args(["-h"])
|
|
|
|
|
|
|
|
|
|
return sio_decorator
|