增加提醒功能,工作日周报月报日报提醒
This commit is contained in:
@@ -44,6 +44,9 @@ groups:
|
|||||||
news:
|
news:
|
||||||
receivers: [] # 定时新闻接收人(roomid 或者 wxid)
|
receivers: [] # 定时新闻接收人(roomid 或者 wxid)
|
||||||
|
|
||||||
|
report_reminder:
|
||||||
|
receivers: [] # 定时日报周报月报提醒(roomid 或者 wxid)
|
||||||
|
|
||||||
# 如果要使用 ChatGPT,取消下面的注释并填写相关内容
|
# 如果要使用 ChatGPT,取消下面的注释并填写相关内容
|
||||||
# chatgpt:
|
# chatgpt:
|
||||||
# key: 填写你 ChatGPT 的 key
|
# key: 填写你 ChatGPT 的 key
|
||||||
|
|||||||
@@ -30,4 +30,5 @@ class Config(object):
|
|||||||
self.GROUPS = yconfig["groups"]["enable"]
|
self.GROUPS = yconfig["groups"]["enable"]
|
||||||
self.CHATGPT = yconfig.get("chatgpt")
|
self.CHATGPT = yconfig.get("chatgpt")
|
||||||
self.NEWS = yconfig["news"]["receivers"]
|
self.NEWS = yconfig["news"]["receivers"]
|
||||||
|
self.REPORT_REMINDERS = yconfig["report_reminder"]["receivers"]
|
||||||
self.TIGERBOT = yconfig.get("tigerbot")
|
self.TIGERBOT = yconfig.get("tigerbot")
|
||||||
|
|||||||
10
main.py
10
main.py
@@ -6,6 +6,7 @@ import signal
|
|||||||
from wcferry import Wcf
|
from wcferry import Wcf
|
||||||
|
|
||||||
from configuration import Config
|
from configuration import Config
|
||||||
|
from report_reminder import ReportReminder
|
||||||
from robot import Robot
|
from robot import Robot
|
||||||
|
|
||||||
|
|
||||||
@@ -23,7 +24,6 @@ def weather_report(robot: Robot) -> None:
|
|||||||
robot.sendTextMsg(report, r)
|
robot.sendTextMsg(report, r)
|
||||||
# robot.sendTextMsg(report, r, "nofity@all") # 发送消息并@所有人
|
# robot.sendTextMsg(report, r, "nofity@all") # 发送消息并@所有人
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
config = Config()
|
config = Config()
|
||||||
wcf = Wcf(debug=True)
|
wcf = Wcf(debug=True)
|
||||||
@@ -38,7 +38,9 @@ def main():
|
|||||||
robot.LOG.info("正在启动机器人···")
|
robot.LOG.info("正在启动机器人···")
|
||||||
|
|
||||||
# 机器人启动发送测试消息
|
# 机器人启动发送测试消息
|
||||||
robot.sendTextMsg("机器人启动成功!", "filehelper")
|
# robot.sendTextMsg("机器人启动成功!", "filehelper")
|
||||||
|
# 打印全部微信联系人
|
||||||
|
print(robot.getAllContacts())
|
||||||
|
|
||||||
# 接收消息
|
# 接收消息
|
||||||
# robot.enableRecvMsg() # 可能会丢消息?
|
# robot.enableRecvMsg() # 可能会丢消息?
|
||||||
@@ -48,7 +50,9 @@ def main():
|
|||||||
robot.onEveryTime("07:00", weather_report, robot=robot)
|
robot.onEveryTime("07:00", weather_report, robot=robot)
|
||||||
|
|
||||||
# 每天 7:30 发送新闻
|
# 每天 7:30 发送新闻
|
||||||
robot.onEveryTime("07:30", robot.newsReport)
|
#robot.onEveryTime("07:30", robot.newsReport)
|
||||||
|
|
||||||
|
robot.onEveryTime("21:42", ReportReminder.remind, robot=robot)
|
||||||
|
|
||||||
# 让机器人一直跑
|
# 让机器人一直跑
|
||||||
robot.keepRunningAndBlockProcess()
|
robot.keepRunningAndBlockProcess()
|
||||||
|
|||||||
57
report_reminder.py
Normal file
57
report_reminder.py
Normal file
@@ -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
|
||||||
@@ -5,3 +5,4 @@ pyyaml
|
|||||||
requests
|
requests
|
||||||
schedule
|
schedule
|
||||||
wcferry>=39.0.0.1
|
wcferry>=39.0.0.1
|
||||||
|
chinese_calendar
|
||||||
|
|||||||
Reference in New Issue
Block a user