summaryrefslogtreecommitdiff
path: root/ATRI/plugins/wife
diff options
context:
space:
mode:
Diffstat (limited to 'ATRI/plugins/wife')
-rw-r--r--ATRI/plugins/wife/__init__.py139
-rw-r--r--ATRI/plugins/wife/data_source.py68
2 files changed, 207 insertions, 0 deletions
diff --git a/ATRI/plugins/wife/__init__.py b/ATRI/plugins/wife/__init__.py
new file mode 100644
index 0000000..a113b8a
--- /dev/null
+++ b/ATRI/plugins/wife/__init__.py
@@ -0,0 +1,139 @@
+import asyncio
+from random import choice
+from pydantic import BaseModel
+
+from nonebot.permission import USER
+from nonebot.rule import Rule
+from nonebot.permission import SUPERUSER
+from nonebot.adapters.cqhttp import Bot, MessageEvent, GroupMessageEvent, Message
+
+from ATRI.utils.limit import FreqLimiter
+from .data_source import Wife
+
+
+_tietie_flmt = FreqLimiter(600)
+
+
+tietie_superuser = Wife().on_message("只与维护者贴贴w", rule=Rule(), permission=SUPERUSER, block=False)
+
+@tietie_superuser.handle()
+async def _tietie_superuser(bot: Bot, event: MessageEvent):
+ user_id = event.get_user_id()
+ if not _tietie_flmt.check(user_id):
+ await tietie_superuser.finish()
+
+ result = Wife().to_superuser(user_id)
+ _tietie_flmt.start_cd(user_id)
+ await tietie_superuser.finish(Message(result))
+
+
+_wife_flmt = FreqLimiter(10)
+
+class MarryInfo(BaseModel):
+ name: str
+ sex: str
+ wife: str
+
+
+get_wife = Wife().on_command("抽老婆", "随机选择一位幸运裙友成为老婆!")
+
+@get_wife.handle()
+async def _get_wife(bot: Bot, event: GroupMessageEvent):
+ user_id = event.get_user_id()
+ if not _wife_flmt.check(user_id):
+ await get_wife.finish()
+
+ group_id = event.group_id
+ req_user_info: dict = await bot.get_group_member_info(group_id=group_id, user_id=int(user_id))
+ req_user_card = req_user_info["card"]
+ req_user_sex = req_user_info["sex"]
+ is_nick = "老公" if req_user_sex == "male" else "老婆"
+
+ repo_0 = (
+ "现在咱将随机抽取一位幸运裙友\n"
+ f"成为{req_user_card}的{is_nick}!"
+ )
+ await bot.send(event, repo_0)
+ await asyncio.sleep(10)
+
+ prep_list = await bot.get_group_member_list(group_id=group_id)
+ prep_list = [prep.get("user_id", 114514) for prep in prep_list]
+
+ lucky_user = choice(prep_list)
+ lucky_user_info: dict = await bot.get_group_member_info(group_id=group_id, user_id=lucky_user)
+ lucky_user_card = lucky_user_info["card"]
+ lucky_user_sex = lucky_user_info["sex"]
+
+ data = Wife().load_marry_list()
+ data[lucky_user] = MarryInfo(
+ name=req_user_card,
+ sex=is_nick,
+ wife=user_id
+ ).dict()
+ data[user_id] = MarryInfo(
+ name=lucky_user_card,
+ sex=lucky_user_sex,
+ wife=lucky_user
+ ).dict()
+ Wife().save_marry_list(data)
+
+ repo_1 = f"好欸!{lucky_user_card}成为了{req_user_card}的{is_nick}"
+ _wife_flmt.start_cd(user_id)
+ await get_wife.finish(repo_1)
+
+
+_call_wife_flmt = FreqLimiter(60)
+
+
+call_wife = Wife().on_command("老婆", "呼唤老婆/老公!", aliases={"老公", "老婆!", "老公!"}, permission=USER("114514"))
+
+@call_wife.handle()
+async def _call_wife(bot: Bot, event: MessageEvent):
+ user_id = event.get_user_id()
+ if not _wife_flmt.check(user_id):
+ await call_wife.finish()
+
+ data = Wife().load_marry_list()
+ if user_id not in data:
+ return
+
+ wife = data[user_id].get("wife", "ignore")
+ sex = data[user_id].get("sex", "male")
+ is_nick = "老公" if sex == "male" else "老婆"
+ repo = f"你已经有{is_nick}啦!是{wife}噢~"
+ _call_wife_flmt.start_cd(user_id)
+ await call_wife.finish(repo)
+
+
+discard_wife = Wife().on_command("我要离婚", "离婚!")
+
+@discard_wife.handle()
+async def _discard_wife(bot: Bot, event: GroupMessageEvent):
+ user_id = event.get_user_id()
+ if not _wife_flmt.check(user_id):
+ await discard_wife.finish()
+
+ await bot.send(event, "真的吗...(y/是)")
+ msg = str(event.message).strip()
+ rd_list = ["y", "Y", "是", "确认", "对"]
+ if msg not in rd_list:
+ await discard_wife.finish("")
+
+ group_id = event.group_id
+ group_info: dict = await bot.get_group_member_info(group_id=group_id, user_id=int(user_id))
+ user_card = group_info.get("card", "老婆")
+
+ data = Wife().load_marry_list()
+ if user_id not in data:
+ await discard_wife.finish("你还没对象呐...")
+
+ discard_user_info = data[user_id]
+ discard_user_card = discard_user_info["name"]
+ discard_user_id = discard_user_info["wife"]
+
+ data.pop(user_id)
+ data.pop(discard_user_id)
+ Wife().save_marry_list(data)
+ repo = f"悲,{user_card}抛弃了{discard_user_card}..."
+ _wife_flmt.start_cd(user_id)
+ await discard_wife.finish(repo)
diff --git a/ATRI/plugins/wife/data_source.py b/ATRI/plugins/wife/data_source.py
new file mode 100644
index 0000000..38e8be4
--- /dev/null
+++ b/ATRI/plugins/wife/data_source.py
@@ -0,0 +1,68 @@
+import os
+import json
+from random import choice
+from pathlib import Path
+from nonebot.adapters.cqhttp import MessageSegment
+
+from ATRI.service import Service
+from ATRI.rule import is_in_service
+
+
+WIFE_DIR = Path(".") / "data" / "database" / "wife"
+os.makedirs(WIFE_DIR, exist_ok=True)
+
+
+__doc__ = """
+老婆...嘿嘿嘿...
+"""
+
+
+class Wife(Service):
+
+ def __init__(self):
+ Service.__init__(self, "老婆", __doc__, rule=is_in_service("老婆"))
+
+ def to_superuser(self, user_id: str):
+ """
+ 全自动贴贴机,限制只有超级管理员才能贴贴
+ """
+ content = choice(
+ [
+ "mua!",
+ "贴贴!",
+ MessageSegment.image(file="https://cdn.jsdelivr.net/gh/Kyomotoi/CDN@master/project/ATRI/wife0.jpg"),
+ MessageSegment.image(file="https://cdn.jsdelivr.net/gh/Kyomotoi/CDN@master/project/ATRI/wife1.jpg"),
+ MessageSegment.image(file="https://cdn.jsdelivr.net/gh/Kyomotoi/CDN@master/project/ATRI/wife2.jpg"),
+ MessageSegment.image(file="https://cdn.jsdelivr.net/gh/Kyomotoi/CDN@master/project/ATRI/wife3.jpg")
+ ]
+ )
+ result = MessageSegment.at(user_id) + content
+ return result
+
+ @staticmethod
+ def load_marry_list() -> dict:
+ """
+ 读取结婚列表
+ """
+ file_name = "marry_list.json"
+ path = WIFE_DIR / file_name
+ if not path.is_file():
+ with open(path, "w", encoding="utf-8") as w:
+ w.write(json.dumps({}))
+
+ data = json.loads(path.read_bytes())
+ return data
+
+ @staticmethod
+ def save_marry_list(data: dict) -> None:
+ """
+ 存储结婚列表
+ """
+ file_name = "marry_list.json"
+ path = WIFE_DIR / file_name
+ if not path.is_file():
+ with open(path, "w", encoding="utf-8") as w:
+ w.write(json.dumps({}))
+
+ with open(path, "w", encoding="utf-8") as w:
+ w.write(json.dumps(data, indent=4))