diff --git a/config.yaml.template b/config.yaml.template index 0586434..9d507e6 100644 --- a/config.yaml.template +++ b/config.yaml.template @@ -44,6 +44,9 @@ groups: news: receivers: [] # 定时新闻接收人(roomid 或者 wxid) +report_reminder: + receivers: [] # 定时日报周报月报提醒(roomid 或者 wxid) + # 如果要使用 ChatGPT,取消下面的注释并填写相关内容 # chatgpt: # key: 填写你 ChatGPT 的 key diff --git a/configuration.py b/configuration.py index 7a96ac6..517d96e 100644 --- a/configuration.py +++ b/configuration.py @@ -30,4 +30,5 @@ class Config(object): self.GROUPS = yconfig["groups"]["enable"] self.CHATGPT = yconfig.get("chatgpt") self.NEWS = yconfig["news"]["receivers"] + self.REPORT_REMINDERS = yconfig["report_reminder"]["receivers"] self.TIGERBOT = yconfig.get("tigerbot") diff --git a/main.py b/main.py index c09d5a7..00f992b 100644 --- a/main.py +++ b/main.py @@ -6,6 +6,7 @@ import signal from wcferry import Wcf from configuration import Config +from report_reminder import ReportReminder from robot import Robot @@ -23,7 +24,6 @@ def weather_report(robot: Robot) -> None: robot.sendTextMsg(report, r) # robot.sendTextMsg(report, r, "nofity@all") # 发送消息并@所有人 - def main(): config = Config() wcf = Wcf(debug=True) @@ -38,7 +38,9 @@ def main(): robot.LOG.info("正在启动机器人···") # 机器人启动发送测试消息 - robot.sendTextMsg("机器人启动成功!", "filehelper") + # robot.sendTextMsg("机器人启动成功!", "filehelper") + # 打印全部微信联系人 + print(robot.getAllContacts()) # 接收消息 # robot.enableRecvMsg() # 可能会丢消息? @@ -48,7 +50,9 @@ def main(): robot.onEveryTime("07:00", weather_report, robot=robot) # 每天 7:30 发送新闻 - robot.onEveryTime("07:30", robot.newsReport) + #robot.onEveryTime("07:30", robot.newsReport) + + robot.onEveryTime("21:42", ReportReminder.remind, robot=robot) # 让机器人一直跑 robot.keepRunningAndBlockProcess() diff --git a/report_reminder.py b/report_reminder.py new file mode 100644 index 0000000..b76e909 --- /dev/null +++ b/report_reminder.py @@ -0,0 +1,57 @@ +import datetime +import calendar +from chinese_calendar import is_workday +from robot import Robot + + +class ReportReminder: + + @staticmethod + def remind(robot) -> None: + + receivers = robot.config.REPORT_REMINDERS + if not receivers: + receivers = ["filehelper"] + #日报周报月报提醒 + for receiver in receivers: + today = datetime.datetime.now().date() + # 如果是非工作日 + if not is_workday(today): + robot.sendTextMsg("休息日快乐", receiver) + # 如果是工作日 + if is_workday(today): + robot.sendTextMsg("该发日报啦", receiver) + # 如果是本周最后一个工作日 + if ReportReminder.last_work_day_of_week(today) == today: + robot.sendTextMsg("该发周报啦", receiver) + # 如果本日是本月最后一整周的最后一个一个工作日: + if ReportReminder.last_work_friday_of_month(today) == today: + robot.sendTextMsg("该发月报啦", receiver) + + # 计算本月最后一个周的最后一个工作日 + @staticmethod + def last_work_friday_of_month(d: datetime.date) -> datetime.date: + days_in_month = calendar.monthrange(d.year, d.month)[1] + weekday = calendar.weekday(d.year, d.month, days_in_month) + if weekday == 4: + last_friday_of_month = datetime.date(d.year, d.month, days_in_month) + else: + if weekday >= 5: + last_friday_of_month = datetime.date(d.year, d.month, days_in_month) - datetime.timedelta( + days=(weekday - 4)) + else: + last_friday_of_month = datetime.date(d.year, d.month, days_in_month) - datetime.timedelta( + days=(weekday + 3)) + while not is_workday(last_friday_of_month): + last_friday_of_month = last_friday_of_month - datetime.timedelta(days=1) + return last_friday_of_month + + # 计算本周最后一个工作日 + @staticmethod + def last_work_day_of_week(d: datetime.date) -> datetime.date: + weekday = calendar.weekday(d.year, d.month, d.day) + last_work_day_of_week = datetime.date(d.year, d.month, d.day) + datetime.timedelta(days=(6 - weekday)) + + while not is_workday(last_work_day_of_week): + last_work_day_of_week = last_work_day_of_week - datetime.timedelta(days=1) + return last_work_day_of_week diff --git a/requirements.txt b/requirements.txt index eac166b..43e9765 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,3 +5,4 @@ pyyaml requests schedule wcferry>=39.0.0.1 +chinese_calendar