更新无法同时开启两个群ai权限的问题

更新README.md
This commit is contained in:
ClovertaTheTrilobita 2025-01-19 20:59:26 +08:00
parent 976160388d
commit 40f573bdd8
6 changed files with 62 additions and 38 deletions

View file

@ -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比赛查询

View file

@ -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>"

View file

@ -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__":

View file

@ -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
); );

View file

@ -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';")

View file

@ -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("成功关闭语言模型对话功能。")