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>
|
<br>
|
||||||
|
|
||||||
###### 我是菜比🏳️🏳️,纯新手写的python 问题肯定多 ,若有兴趣可以帮忙一起完善功能 <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
|
```yaml
|
||||||
chat_ai:
|
chat_ai:
|
||||||
|
admin_password: "<key>" # 设置管理员认证密码
|
||||||
v3url: "<key>"
|
v3url: "<key>"
|
||||||
v3key: "<key>"
|
v3key: "<key>"
|
||||||
deepseek_url: "<key>"
|
deepseek_url: "<key>"
|
||||||
deepseek_key: "<key>"
|
deepseek_key: "<key>"
|
||||||
active: "False" # True为启动ai功能,False为关闭功能
|
|
||||||
```
|
```
|
||||||
|
|
||||||
将你自己的deepseek url和api填入,并将文件重命名为<b><i>chat_ai.yaml</i></b>。
|
将你自己的deepseek url和api填入,并将文件重命名为<b><i>chat_ai.yaml</i></b>。
|
||||||
|
|
||||||
起用ai功能请将active改为True,或详见[下一节](#ai_control)。
|
再设置一个管理员认证密码,详见[下一节](#admin_control)。
|
||||||
|
|
||||||
<br>
|
<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
|
```yaml
|
||||||
"""
|
admin_password: "<key>" # 设置管理员认证密码
|
||||||
设置管理员鉴权密码
|
|
||||||
"""
|
|
||||||
admin_passwd = "1234"
|
|
||||||
```
|
```
|
||||||
|
|
||||||
在这里,你可以修改你的管理员密码*(默认为1234)*
|
在上述<i>"\<key>'"</i>中填入你的密码。
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
设置好你的密码后,在qq中at你的机器人,格式为
|
设置好密码后,在qq中at你的机器人,格式为
|
||||||
|
|
||||||
```
|
```
|
||||||
@<机器人名称> /管理员确认 <密码>
|
@<机器人名称> /管理员确认 <密码>
|
||||||
```
|
```
|
||||||
|
|
||||||
例如,使用默认密码对三叶草进行管理员注册时,假如密码是1234,需要
|
例如,对三叶草进行管理员注册时,假如密码是1234,需要
|
||||||
|
|
||||||
```
|
```
|
||||||
@三叶草 /管理员确认 1234
|
@三叶草 /管理员确认 1234
|
||||||
|
|
@ -337,7 +338,7 @@ admin_passwd = "1234"
|
||||||
在已经是管理员的情况下,你可以对机器人发送
|
在已经是管理员的情况下,你可以对机器人发送
|
||||||
|
|
||||||
```
|
```
|
||||||
@<机器人名称> /activate_ai
|
@<机器人名称> /启动ai
|
||||||
```
|
```
|
||||||
|
|
||||||
实现对AI功能的开关。若此前AI功能处于关闭状态,则机器人会回复
|
实现对AI功能的开关。若此前AI功能处于关闭状态,则机器人会回复
|
||||||
|
|
@ -352,6 +353,8 @@ admin_passwd = "1234"
|
||||||
成功关闭语言模型对话功能。
|
成功关闭语言模型对话功能。
|
||||||
```
|
```
|
||||||
|
|
||||||
|
AI功能为每个群单独启动,默认关闭。
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
#### 🔆CodeForces比赛查询
|
#### 🔆CodeForces比赛查询
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
chat_ai:
|
chat_ai:
|
||||||
admin_password: "<key>"
|
admin_password: "<key>" # 设置管理员认证密码
|
||||||
v3url: "<key>"
|
v3url: "<key>"
|
||||||
v3key: "<key>"
|
v3key: "<key>"
|
||||||
deepseek_url: "<key>"
|
deepseek_url: "<key>"
|
||||||
|
|
|
||||||
|
|
@ -8,15 +8,15 @@ class SqliteSqlalchemy(object):
|
||||||
# 创建Sqlite的session连接对象
|
# 创建Sqlite的session连接对象
|
||||||
self.session = sessionmaker(bind=engine)()
|
self.session = sessionmaker(bind=engine)()
|
||||||
|
|
||||||
def insert_administrator(member_openid, group_id):
|
def insert_administrator(member_openid):
|
||||||
session = SqliteSqlalchemy().session
|
session = SqliteSqlalchemy().session
|
||||||
session.execute(insertAdminID, {'member_openid': member_openid, 'group_id': group_id})
|
session.execute(insertAdminID, {'member_openid': member_openid})
|
||||||
session.commit()
|
session.commit()
|
||||||
session.close()
|
session.close()
|
||||||
|
|
||||||
def check_admin_access(member_openid,group_id):
|
def check_admin_access(member_openid):
|
||||||
session = SqliteSqlalchemy().session
|
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()
|
session.close()
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
@ -27,23 +27,34 @@ def select_status(group_id):
|
||||||
session.close()
|
session.close()
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def update_administrator(group_id, is_on):
|
def update_ai_availability(group_id, is_on):
|
||||||
session = SqliteSqlalchemy().session
|
session = SqliteSqlalchemy().session
|
||||||
session.execute(updateIsOn, {'group_id': group_id, 'is_on': is_on})
|
result = session.execute(selectGroupID, {'group_id': group_id}).fetchone()
|
||||||
session.commit()
|
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()
|
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")
|
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__":
|
if __name__ == "__main__":
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,15 @@ c = conn.cursor()
|
||||||
c.execute("""
|
c.execute("""
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS admin_list (
|
CREATE TABLE IF NOT EXISTS admin_list (
|
||||||
user_id VARCHAR(100) PRIMARY KEY,
|
user_id VARCHAR(100) PRIMARY KEY
|
||||||
group_id VARCHAR(100),
|
);
|
||||||
|
|
||||||
|
""")
|
||||||
|
|
||||||
|
c.execute("""
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS group_list (
|
||||||
|
group_id VARCHAR(100) PRIMARY KEY,
|
||||||
is_on BOOLEAN DEFAULT false
|
is_on BOOLEAN DEFAULT false
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -95,10 +95,11 @@ def admin_init():
|
||||||
session = SqliteSqlalchemy().session
|
session = SqliteSqlalchemy().session
|
||||||
# 检查某个表是否存在
|
# 检查某个表是否存在
|
||||||
table_exists = session.execute(selectAdminList).fetchone()
|
table_exists = session.execute(selectAdminList).fetchone()
|
||||||
if table_exists:
|
table_exists2 = session.execute(selectGroupList).fetchone()
|
||||||
return print("管理员表状态正常。")
|
if table_exists and table_exists2:
|
||||||
|
return print("管理员表和群聊表状态正常。")
|
||||||
else:
|
else:
|
||||||
print("管理员表不存在,开始执行初始化文件。")
|
print("管理员表或群聊表不存在,开始执行初始化文件。")
|
||||||
execute_init_file4()
|
execute_init_file4()
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
|
|
@ -129,4 +130,6 @@ selectUserList = text(
|
||||||
"SELECT name FROM sqlite_master WHERE type='table' AND name='user_list';")
|
"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):
|
async def verify_as_administrator(message: MessageEvent):
|
||||||
passwd = message.get_plaintext().replace("/管理员确认", "").strip(" ")
|
passwd = message.get_plaintext().replace("/管理员确认", "").strip(" ")
|
||||||
if passwd == admin_password:
|
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("成功注册为管理员。")
|
await verification.finish("成功注册为管理员。")
|
||||||
else:
|
else:
|
||||||
await verification.finish("管理员认证密码错误。")
|
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 = on_command("开启ai",aliases={'关闭ai'}, rule=to_me(), priority=10, block=True)
|
||||||
@ai_on.handle()
|
@ai_on.handle()
|
||||||
async def change_ai_availability(message: MessageEvent):
|
async def change_ai_availability(message: MessageEvent):
|
||||||
|
result = check_admin_access(message.get_user_id())
|
||||||
result = check_admin_access(message.get_user_id(), message.get_session_id().split('_')[1])
|
result_group = select_status(message.get_session_id().split('_')[1])
|
||||||
if result is None:
|
if result is None:
|
||||||
await ai_on.finish("当前群无权限,请联系管理员")
|
await ai_on.finish("当前群无权限,请联系管理员")
|
||||||
elif (not result.is_on) & (message.get_plaintext() == "/开启ai"):
|
elif (result_group is None or not result_group.is_on) and (message.get_plaintext() == "/开启ai"):
|
||||||
update_administrator(message.get_session_id().split('_')[1], True)
|
update_ai_availability(message.get_session_id().split('_')[1], True)
|
||||||
await ai_on.finish("成功开启语言模型对话功能。一起来聊天吧~")
|
await ai_on.finish("成功开启语言模型对话功能。一起来聊天吧~")
|
||||||
elif not result.is_on :
|
elif not result_group.is_on:
|
||||||
await ai_on.finish("当前群未开启ai聊天。")
|
await ai_on.finish("当前群未开启ai聊天。")
|
||||||
else:
|
else:
|
||||||
update_administrator(message.get_session_id().split('_')[1], False)
|
update_ai_availability(message.get_session_id().split('_')[1], False)
|
||||||
await ai_on.finish("成功关闭语言模型对话功能。")
|
await ai_on.finish("成功关闭语言模型对话功能。")
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue