mirror of
https://github.com/ClovertaTheTrilobita/SanYeCao-Nonebot.git
synced 2026-04-01 22:04:51 +00:00
新增用户待办功能
This commit is contained in:
parent
bbb4c4f639
commit
024a1d3f76
5 changed files with 206 additions and 1 deletions
|
|
@ -19,3 +19,4 @@ requests~=2.31.0
|
||||||
pillow
|
pillow
|
||||||
pyyaml
|
pyyaml
|
||||||
qrcode
|
qrcode
|
||||||
|
lazy_object_proxy
|
||||||
|
|
|
||||||
29
src/my_sqlite/data_init/todo_init.py
Normal file
29
src/my_sqlite/data_init/todo_init.py
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
import sqlite3
|
||||||
|
|
||||||
|
# 连接到数据库,如果不存在则创建
|
||||||
|
conn = sqlite3.connect('chat_bot.db')
|
||||||
|
# 创建游标
|
||||||
|
c = conn.cursor()
|
||||||
|
#
|
||||||
|
c.execute("""DROP TABLE IF EXISTS user_todo_list; """)
|
||||||
|
c.execute("""DROP TABLE IF EXISTS user_list; """)
|
||||||
|
# 创建表
|
||||||
|
c.execute("""
|
||||||
|
|
||||||
|
CREATE TABLE user_list (
|
||||||
|
user_id VARCHAR(100) PRIMARY KEY
|
||||||
|
);
|
||||||
|
|
||||||
|
""")
|
||||||
|
print("user_list created")
|
||||||
|
|
||||||
|
c.execute("""
|
||||||
|
|
||||||
|
CREATE TABLE user_todo_list (
|
||||||
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
user_id VARCHAR(100),
|
||||||
|
content TEXT,
|
||||||
|
FOREIGN KEY (user_id) REFERENCES user_list(user_id)
|
||||||
|
);
|
||||||
|
""")
|
||||||
|
|
||||||
116
src/my_sqlite/todo_by_sqlite.py
Normal file
116
src/my_sqlite/todo_by_sqlite.py
Normal file
|
|
@ -0,0 +1,116 @@
|
||||||
|
from sqlalchemy import Column, Integer, String, Date, create_engine, text
|
||||||
|
from sqlalchemy.orm import declarative_base, sessionmaker
|
||||||
|
import sqlite3
|
||||||
|
|
||||||
|
|
||||||
|
class SqliteSqlalchemy(object):
|
||||||
|
def __init__(self):
|
||||||
|
# 创建Sqlite连接引擎
|
||||||
|
engine = create_engine('sqlite:///./chat_bot.db', echo=True)
|
||||||
|
# 创建Sqlite的session连接对象
|
||||||
|
self.session = sessionmaker(bind=engine)()
|
||||||
|
|
||||||
|
|
||||||
|
def user_exists(member_openid):
|
||||||
|
"""
|
||||||
|
查询数据库中是否包括此用户。
|
||||||
|
|
||||||
|
:param member_openid:
|
||||||
|
:return: 若包含用户返回True,否则返回False
|
||||||
|
"""
|
||||||
|
session = SqliteSqlalchemy().session
|
||||||
|
result = session.execute(selectUserId,
|
||||||
|
{'member_openid': member_openid}).fetchone()
|
||||||
|
session.close()
|
||||||
|
if result is None:
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def insert_user_todo_list(member_openid, content):
|
||||||
|
"""
|
||||||
|
插入用户待办
|
||||||
|
|
||||||
|
:param member_openid:
|
||||||
|
:param content: 待办内容(str)
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
session = SqliteSqlalchemy().session
|
||||||
|
if not user_exists(member_openid):
|
||||||
|
session.execute(insertUserId, {'member_openid': member_openid})
|
||||||
|
|
||||||
|
session.execute(insertUserTodo, {'member_openid': member_openid, 'content': content})
|
||||||
|
session.commit()
|
||||||
|
session.close()
|
||||||
|
|
||||||
|
|
||||||
|
def get_user_todo_list(member_openid):
|
||||||
|
"""
|
||||||
|
展示用户所有待办
|
||||||
|
|
||||||
|
:param member_openid:
|
||||||
|
:return: 数据库查询结果(Sequence)
|
||||||
|
"""
|
||||||
|
if not user_exists(member_openid):
|
||||||
|
return False
|
||||||
|
session = SqliteSqlalchemy().session
|
||||||
|
result = session.execute(selectUserTodo,
|
||||||
|
{'member_openid': member_openid}).fetchall()
|
||||||
|
session.close()
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
def delete_user_todo(member_openid, del_line_num):
|
||||||
|
"""
|
||||||
|
删除某用户指定行数的待办
|
||||||
|
|
||||||
|
:param member_openid:
|
||||||
|
:param del_line_num: 指定的行数(int)
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
|
||||||
|
if not user_exists(member_openid):
|
||||||
|
return -1
|
||||||
|
|
||||||
|
session = SqliteSqlalchemy().session
|
||||||
|
todo_list_len = session.execute(checkUserTodoLength, {'member_openid': member_openid}).fetchone()
|
||||||
|
max_length = int(str(todo_list_len).lstrip("(").rstrip(",)"))
|
||||||
|
if del_line_num > max_length or del_line_num < 1:
|
||||||
|
return 1
|
||||||
|
|
||||||
|
session.execute(deleteUserTodo, {'member_openid': member_openid, 'del_line_num': del_line_num})
|
||||||
|
session.commit()
|
||||||
|
session.close()
|
||||||
|
return 0
|
||||||
|
|
||||||
|
# 查找用户
|
||||||
|
selectUserId = text(
|
||||||
|
"select * from user_list where user_id = :member_openid")
|
||||||
|
|
||||||
|
# 插入数据
|
||||||
|
insertUserTodo = text(
|
||||||
|
"INSERT INTO user_todo_list (user_id, content) VALUES (:member_openid, :content)")
|
||||||
|
|
||||||
|
# 插入用户id
|
||||||
|
insertUserId = text("INSERT INTO user_list (user_id) VALUES (:member_openid)")
|
||||||
|
|
||||||
|
# 删除特定行的待办
|
||||||
|
deleteUserTodo = text(
|
||||||
|
"DELETE FROM user_todo_list WHERE id=(SELECT id FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY id) AS row_number FROM (SELECT * FROM user_todo_list WHERE user_id = :member_openid)) WHERE row_number = :del_line_num)")
|
||||||
|
|
||||||
|
# 查询用户待办数
|
||||||
|
checkUserTodoLength = text(
|
||||||
|
"SELECT COUNT(*) FROM user_todo_list WHERE user_id = :member_openid")
|
||||||
|
|
||||||
|
# 查找用户待办
|
||||||
|
selectUserTodo = text(
|
||||||
|
"select content from user_todo_list where user_id = :member_openid")
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
print('test:')
|
||||||
|
# insert_user_todo_list('111', '123')
|
||||||
|
# print(get_user_todo_list('111'))
|
||||||
|
# del_line_num = '1'
|
||||||
|
# delete_user_todo('111', int(del_line_num))
|
||||||
|
# print(get_user_todo_list('111'))
|
||||||
|
|
@ -5,7 +5,7 @@ from nonebot import on_message
|
||||||
from nonebot.adapters.qq import Message
|
from nonebot.adapters.qq import Message
|
||||||
from nonebot.adapters import Bot, Event
|
from nonebot.adapters import Bot, Event
|
||||||
|
|
||||||
menu = ['/今日运势','/天气','/图','/点歌','/摸摸头','/群老婆','/今日老婆', '/待办', '/test', '我喜欢你', "❤"]
|
menu = ['/今日运势','/天气','/图','/点歌','/摸摸头','/群老婆','/今日老婆', '/待办', '/test', '我喜欢你', "❤", "/待办查询", "/新建待办", "/删除待办"]
|
||||||
async def check_value_in_menu(event: Event) -> bool:
|
async def check_value_in_menu(event: Event) -> bool:
|
||||||
value = event.get_plaintext().strip().split(" ")
|
value = event.get_plaintext().strip().split(" ")
|
||||||
if value[0] in menu:
|
if value[0] in menu:
|
||||||
|
|
|
||||||
59
src/qq_plugins/to_do.py
Normal file
59
src/qq_plugins/to_do.py
Normal file
|
|
@ -0,0 +1,59 @@
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
from debugpy.server.cli import switches
|
||||||
|
from nonebot.rule import to_me
|
||||||
|
from nonebot.plugin import on_command
|
||||||
|
from nonebot.adapters.qq import Message, MessageEvent, MessageSegment
|
||||||
|
from src.my_sqlite.todo_by_sqlite import *
|
||||||
|
|
||||||
|
|
||||||
|
get_todo_list = on_command("待办查询", rule=to_me(), priority=10, block=True, aliases={"代办", "daiban"})
|
||||||
|
@get_todo_list.handle()
|
||||||
|
async def show_todo_list(message: MessageEvent):
|
||||||
|
"""
|
||||||
|
查询用户所有的待办
|
||||||
|
|
||||||
|
:param message:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
member_openid = message.get_user_id()
|
||||||
|
|
||||||
|
result = get_user_todo_list(member_openid)
|
||||||
|
if result is False:
|
||||||
|
await get_todo_list.finish("您还未创建任何待办\n尝试使用 /新建待办 创建一份吧")
|
||||||
|
|
||||||
|
todo_list = ""
|
||||||
|
count = 0
|
||||||
|
print(result)
|
||||||
|
for each_content in result:
|
||||||
|
count += 1
|
||||||
|
todo_content = "\n" + str(count) + "." + str(each_content).lstrip("('").rstrip("',)") + "\n"
|
||||||
|
todo_list = "".join([todo_list, todo_content])
|
||||||
|
await get_todo_list.finish("您的待办有如下哦:⭐\n" + todo_list)
|
||||||
|
|
||||||
|
|
||||||
|
insert_todo = on_command("新建待办", rule=to_me(), priority=10, block=True)
|
||||||
|
@insert_todo.handle()
|
||||||
|
async def insert_todo_list(message: MessageEvent):
|
||||||
|
member_openid = message.get_user_id()
|
||||||
|
content = message.get_plaintext().replace("/新建待办", "").strip(" ")
|
||||||
|
insert_user_todo_list(member_openid, content)
|
||||||
|
await insert_todo.finish("成功添加待办,今后也要加油哦(ง •_•)ง")
|
||||||
|
|
||||||
|
|
||||||
|
delete_todo = on_command("删除待办", rule=to_me(), priority=10, block=True)
|
||||||
|
@delete_todo.handle()
|
||||||
|
async def del_todo(message: MessageEvent):
|
||||||
|
member_openid = message.get_user_id()
|
||||||
|
del_line_str = message.get_plaintext().replace("/删除待办", "").strip(" ")
|
||||||
|
try:
|
||||||
|
del_line_num = int(del_line_str)
|
||||||
|
except:
|
||||||
|
await delete_todo.finish("请检查您的输入是否正确。\n请输入 /删除待办+数字 哦。")
|
||||||
|
result = delete_user_todo(member_openid, int(del_line_num))
|
||||||
|
if result == -1:
|
||||||
|
await delete_todo.finish("您还未创建过待办哦。")
|
||||||
|
elif result == 0:
|
||||||
|
await delete_todo.finish("成功删除第" + str(del_line_num) + "条待办。")
|
||||||
|
elif result == 1:
|
||||||
|
await delete_todo.finish("没有找到这条待办哦,请检查您的输入是否正确.")
|
||||||
Loading…
Reference in a new issue