From 40f573bdd8eabf68cadce92fa1e5b4e6851dd098 Mon Sep 17 00:00:00 2001 From: ClovertaTheTrilobita Date: Sun, 19 Jan 2025 20:59:26 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=97=A0=E6=B3=95=E5=90=8C?= =?UTF-8?q?=E6=97=B6=E5=BC=80=E5=90=AF=E4=B8=A4=E4=B8=AA=E7=BE=A4ai?= =?UTF-8?q?=E6=9D=83=E9=99=90=E7=9A=84=E9=97=AE=E9=A2=98=20=E6=9B=B4?= =?UTF-8?q?=E6=96=B0README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 31 ++++++++++++++----------- src/ai_chat/config/example.chat_ai.yaml | 2 +- src/my_sqlite/admin_manage_by_sqlite.py | 31 +++++++++++++++++-------- src/my_sqlite/data_init/admin_init.py | 11 +++++++-- src/my_sqlite/data_init/data_init.py | 11 +++++---- src/qq_plugins/check.py | 14 +++++------ 6 files changed, 62 insertions(+), 38 deletions(-) diff --git a/README.md b/README.md index 4bf1407..291a342 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,11 @@
###### 我是菜比🏳️🏳️,纯新手写的python 问题肯定多 ,若有兴趣可以帮忙一起完善功能
-###### QQ交流群:[710101225](https://qm.qq.com/q/AQyepzKUJq)
+###### QQ交流群:[710101225](https://qm.qq.com/q/AQyepzKUJq) + +######
+ +- ↑sly是代码领域大神,别信他 ## 🌈目前功能: @@ -272,16 +276,16 @@ image: ```yaml chat_ai: + admin_password: "" # 设置管理员认证密码 v3url: "" v3key: "" deepseek_url: "" deepseek_key: "" - active: "False" # True为启动ai功能,False为关闭功能 ``` 将你自己的deepseek url和api填入,并将文件重命名为chat_ai.yaml。 -起用ai功能请将active改为True,或详见[下一节](#ai_control)。 +再设置一个管理员认证密码,详见[下一节](#admin_control)。
@@ -295,28 +299,25 @@ chat_ai: ##### 使用: -###### 1.注册为管理员 +###### 1.注册为管理员 -在[src/qq_plugins/check.py](src/qq_plugins/check.py)内,找到 +在[src/ai_chat/config/example.chat_ai.yaml](src/ai_chat/config/chat_ai.yaml)内,找到 -```python -""" -设置管理员鉴权密码 -""" -admin_passwd = "1234" +```yaml + admin_password: "" # 设置管理员认证密码 ``` -在这里,你可以修改你的管理员密码*(默认为1234)* +在上述"\'"中填入你的密码。
-设置好你的密码后,在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功能为每个群单独启动,默认关闭。 +
#### 🔆CodeForces比赛查询 diff --git a/src/ai_chat/config/example.chat_ai.yaml b/src/ai_chat/config/example.chat_ai.yaml index 0037c64..77fe433 100644 --- a/src/ai_chat/config/example.chat_ai.yaml +++ b/src/ai_chat/config/example.chat_ai.yaml @@ -1,5 +1,5 @@ chat_ai: - admin_password: "" + admin_password: "" # 设置管理员认证密码 v3url: "" v3key: "" deepseek_url: "" diff --git a/src/my_sqlite/admin_manage_by_sqlite.py b/src/my_sqlite/admin_manage_by_sqlite.py index 1fdd441..c4b6f47 100644 --- a/src/my_sqlite/admin_manage_by_sqlite.py +++ b/src/my_sqlite/admin_manage_by_sqlite.py @@ -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__": diff --git a/src/my_sqlite/data_init/admin_init.py b/src/my_sqlite/data_init/admin_init.py index 28958e3..ed722c5 100644 --- a/src/my_sqlite/data_init/admin_init.py +++ b/src/my_sqlite/data_init/admin_init.py @@ -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 ); diff --git a/src/my_sqlite/data_init/data_init.py b/src/my_sqlite/data_init/data_init.py index e679806..7f47cc8 100644 --- a/src/my_sqlite/data_init/data_init.py +++ b/src/my_sqlite/data_init/data_init.py @@ -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';") \ No newline at end of file +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';") \ No newline at end of file diff --git a/src/qq_plugins/check.py b/src/qq_plugins/check.py index ecd182a..15cb076 100644 --- a/src/qq_plugins/check.py +++ b/src/qq_plugins/check.py @@ -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("成功关闭语言模型对话功能。")