mirror of
https://github.com/ClovertaTheTrilobita/SanYeCao-Nonebot.git
synced 2026-04-01 22:04:51 +00:00
更新无法同时开启两个群ai权限的问题
更新README.md
This commit is contained in:
parent
976160388d
commit
40f573bdd8
6 changed files with 62 additions and 38 deletions
31
README.md
31
README.md
|
|
@ -20,7 +20,11 @@
|
|||
<br>
|
||||
|
||||
###### 我是菜比🏳️🏳️,纯新手写的python 问题肯定多 ,若有兴趣可以帮忙一起完善功能 <br>
|
||||
###### QQ交流群:[710101225](https://qm.qq.com/q/AQyepzKUJq) <br>
|
||||
###### QQ交流群:[710101225](https://qm.qq.com/q/AQyepzKUJq)
|
||||
|
||||
###### <br>
|
||||
|
||||
- ↑sly是代码领域大神,别信他
|
||||
|
||||
## 🌈目前功能:
|
||||
|
||||
|
|
@ -272,16 +276,16 @@ image:
|
|||
|
||||
```yaml
|
||||
chat_ai:
|
||||
admin_password: "<key>" # 设置管理员认证密码
|
||||
v3url: "<key>"
|
||||
v3key: "<key>"
|
||||
deepseek_url: "<key>"
|
||||
deepseek_key: "<key>"
|
||||
active: "False" # True为启动ai功能,False为关闭功能
|
||||
```
|
||||
|
||||
将你自己的deepseek url和api填入,并将文件重命名为<b><i>chat_ai.yaml</i></b>。
|
||||
|
||||
起用ai功能请将active改为True,或详见[下一节](#ai_control)。
|
||||
再设置一个管理员认证密码,详见[下一节](#admin_control)。
|
||||
|
||||
<br>
|
||||
|
||||
|
|
@ -295,28 +299,25 @@ chat_ai:
|
|||
|
||||
##### 使用:
|
||||
|
||||
###### 1.注册为管理员
|
||||
###### 1.注册为管理员<a id="admin_control"></a>
|
||||
|
||||
在[<b>src/qq_plugins/check.py</b>](src/qq_plugins/check.py)内,找到
|
||||
在[<b>src/ai_chat/config/example.chat_ai.yaml</b>](src/ai_chat/config/chat_ai.yaml)内,找到
|
||||
|
||||
```python
|
||||
"""
|
||||
设置管理员鉴权密码
|
||||
"""
|
||||
admin_passwd = "1234"
|
||||
```yaml
|
||||
admin_password: "<key>" # 设置管理员认证密码
|
||||
```
|
||||
|
||||
在这里,你可以修改你的管理员密码*(默认为1234)*
|
||||
在上述<i>"\<key>'"</i>中填入你的密码。
|
||||
|
||||
<br>
|
||||
|
||||
设置好你的密码后,在qq中at你的机器人,格式为
|
||||
设置好密码后,在qq中at你的机器人,格式为
|
||||
|
||||
```
|
||||
@<机器人名称> /管理员确认 <密码>
|
||||
```
|
||||
|
||||
例如,使用默认密码对三叶草进行管理员注册时,假如密码是1234,需要
|
||||
例如,对三叶草进行管理员注册时,假如密码是1234,需要
|
||||
|
||||
```
|
||||
@三叶草 /管理员确认 1234
|
||||
|
|
@ -337,7 +338,7 @@ admin_passwd = "1234"
|
|||
在已经是管理员的情况下,你可以对机器人发送
|
||||
|
||||
```
|
||||
@<机器人名称> /activate_ai
|
||||
@<机器人名称> /启动ai
|
||||
```
|
||||
|
||||
实现对AI功能的开关。若此前AI功能处于关闭状态,则机器人会回复
|
||||
|
|
@ -352,6 +353,8 @@ admin_passwd = "1234"
|
|||
成功关闭语言模型对话功能。
|
||||
```
|
||||
|
||||
AI功能为每个群单独启动,默认关闭。
|
||||
|
||||
<br>
|
||||
|
||||
#### 🔆CodeForces比赛查询
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
chat_ai:
|
||||
admin_password: "<key>"
|
||||
admin_password: "<key>" # 设置管理员认证密码
|
||||
v3url: "<key>"
|
||||
v3key: "<key>"
|
||||
deepseek_url: "<key>"
|
||||
|
|
|
|||
|
|
@ -8,15 +8,15 @@ class SqliteSqlalchemy(object):
|
|||
# 创建Sqlite的session连接对象
|
||||
self.session = sessionmaker(bind=engine)()
|
||||
|
||||
def insert_administrator(member_openid, group_id):
|
||||
def insert_administrator(member_openid):
|
||||
session = SqliteSqlalchemy().session
|
||||
session.execute(insertAdminID, {'member_openid': member_openid, 'group_id': group_id})
|
||||
session.execute(insertAdminID, {'member_openid': member_openid})
|
||||
session.commit()
|
||||
session.close()
|
||||
|
||||
def check_admin_access(member_openid,group_id):
|
||||
def check_admin_access(member_openid):
|
||||
session = SqliteSqlalchemy().session
|
||||
result = session.execute(selectAdminID, {'member_openid': member_openid,'group_id': group_id}).fetchone()
|
||||
result = session.execute(selectAdminID, {'member_openid': member_openid}).fetchone()
|
||||
session.close()
|
||||
return result
|
||||
|
||||
|
|
@ -27,23 +27,34 @@ def select_status(group_id):
|
|||
session.close()
|
||||
return result
|
||||
|
||||
def update_administrator(group_id, is_on):
|
||||
def update_ai_availability(group_id, is_on):
|
||||
session = SqliteSqlalchemy().session
|
||||
session.execute(updateIsOn, {'group_id': group_id, 'is_on': is_on})
|
||||
session.commit()
|
||||
result = session.execute(selectGroupID, {'group_id': group_id}).fetchone()
|
||||
if result is None:
|
||||
session.execute(insertGroupID, {'group_id': group_id, 'is_on': is_on})
|
||||
session.commit()
|
||||
else:
|
||||
session.execute(updateIsOn, {'group_id': group_id, 'is_on': is_on})
|
||||
session.commit()
|
||||
session.close()
|
||||
|
||||
# 插入数据
|
||||
insertAdminID = text("INSERT INTO admin_list (user_id,group_id) VALUES (:member_openid,:group_id)")
|
||||
insertAdminID = text("INSERT INTO admin_list (user_id) VALUES (:member_openid)")
|
||||
|
||||
# 查找用户
|
||||
selectAdminID = text("SELECT * FROM admin_list WHERE user_id = :member_openid")
|
||||
|
||||
# 更新数据
|
||||
selectIsOn = text("SELECT is_on FROM admin_list WHERE group_id = :group_id")
|
||||
selectIsOn = text("SELECT is_on FROM group_list WHERE group_id = :group_id")
|
||||
|
||||
# 更新数据
|
||||
updateIsOn = text("UPDATE admin_list SET is_on = :is_on WHERE group_id = :group_id ")
|
||||
updateIsOn = text("UPDATE group_list SET is_on = :is_on WHERE group_id = :group_id")
|
||||
|
||||
# 查询是否已存该群
|
||||
selectGroupID = text("SELECT * FROM group_list WHERE group_id = :group_id")
|
||||
|
||||
# 存储群聊ID
|
||||
insertGroupID = text("INSERT INTO group_list (group_id, is_on) VALUES (:group_id, :is_on)")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
|
|||
|
|
@ -8,8 +8,15 @@ c = conn.cursor()
|
|||
c.execute("""
|
||||
|
||||
CREATE TABLE IF NOT EXISTS admin_list (
|
||||
user_id VARCHAR(100) PRIMARY KEY,
|
||||
group_id VARCHAR(100),
|
||||
user_id VARCHAR(100) PRIMARY KEY
|
||||
);
|
||||
|
||||
""")
|
||||
|
||||
c.execute("""
|
||||
|
||||
CREATE TABLE IF NOT EXISTS group_list (
|
||||
group_id VARCHAR(100) PRIMARY KEY,
|
||||
is_on BOOLEAN DEFAULT false
|
||||
);
|
||||
|
||||
|
|
|
|||
|
|
@ -95,10 +95,11 @@ def admin_init():
|
|||
session = SqliteSqlalchemy().session
|
||||
# 检查某个表是否存在
|
||||
table_exists = session.execute(selectAdminList).fetchone()
|
||||
if table_exists:
|
||||
return print("管理员表状态正常。")
|
||||
table_exists2 = session.execute(selectGroupList).fetchone()
|
||||
if table_exists and table_exists2:
|
||||
return print("管理员表和群聊表状态正常。")
|
||||
else:
|
||||
print("管理员表不存在,开始执行初始化文件。")
|
||||
print("管理员表或群聊表不存在,开始执行初始化文件。")
|
||||
execute_init_file4()
|
||||
return ""
|
||||
|
||||
|
|
@ -129,4 +130,6 @@ selectUserList = text(
|
|||
"SELECT name FROM sqlite_master WHERE type='table' AND name='user_list';")
|
||||
|
||||
# 查询管理员表是否存在
|
||||
selectAdminList = text("SELECT name FROM sqlite_master WHERE type='table' AND name='admin_list';")
|
||||
selectAdminList = text("SELECT name FROM sqlite_master WHERE type='table' AND name='admin_list';")
|
||||
# 查询群聊表是否存在
|
||||
selectGroupList = text("SELECT name FROM sqlite_master WHERE type='table' AND name='group_list';")
|
||||
|
|
@ -75,7 +75,7 @@ verification = on_command("管理员确认", rule=to_me(), priority=10, block=Tr
|
|||
async def verify_as_administrator(message: MessageEvent):
|
||||
passwd = message.get_plaintext().replace("/管理员确认", "").strip(" ")
|
||||
if passwd == admin_password:
|
||||
insert_administrator(message.get_user_id(), message.get_session_id().split('_')[1])
|
||||
insert_administrator(message.get_user_id())
|
||||
await verification.finish("成功注册为管理员。")
|
||||
else:
|
||||
await verification.finish("管理员认证密码错误。")
|
||||
|
|
@ -84,15 +84,15 @@ async def verify_as_administrator(message: MessageEvent):
|
|||
ai_on = on_command("开启ai",aliases={'关闭ai'}, rule=to_me(), priority=10, block=True)
|
||||
@ai_on.handle()
|
||||
async def change_ai_availability(message: MessageEvent):
|
||||
|
||||
result = check_admin_access(message.get_user_id(), message.get_session_id().split('_')[1])
|
||||
result = check_admin_access(message.get_user_id())
|
||||
result_group = select_status(message.get_session_id().split('_')[1])
|
||||
if result is None:
|
||||
await ai_on.finish("当前群无权限,请联系管理员")
|
||||
elif (not result.is_on) & (message.get_plaintext() == "/开启ai"):
|
||||
update_administrator(message.get_session_id().split('_')[1], True)
|
||||
elif (result_group is None or not result_group.is_on) and (message.get_plaintext() == "/开启ai"):
|
||||
update_ai_availability(message.get_session_id().split('_')[1], True)
|
||||
await ai_on.finish("成功开启语言模型对话功能。一起来聊天吧~")
|
||||
elif not result.is_on :
|
||||
elif not result_group.is_on:
|
||||
await ai_on.finish("当前群未开启ai聊天。")
|
||||
else:
|
||||
update_administrator(message.get_session_id().split('_')[1], False)
|
||||
update_ai_availability(message.get_session_id().split('_')[1], False)
|
||||
await ai_on.finish("成功关闭语言模型对话功能。")
|
||||
|
|
|
|||
Loading…
Reference in a new issue