diff --git a/plugin_moyu/holiday_test.go b/plugin_moyu/holiday_test.go new file mode 100644 index 00000000..4b627394 --- /dev/null +++ b/plugin_moyu/holiday_test.go @@ -0,0 +1,64 @@ +package moyu + +import ( + "fmt" + "testing" + "time" + + reg "github.com/fumiama/go-registry" +) + +var sr = reg.NewRegedit("reilia.eastasia.azurecontainer.io:32664", "fumiama", "--") + +func TestGetHoliday(t *testing.T) { + registry.Connect() + holidaymap = make(map[string]*Holiday) + h := GetHoliday("元旦") + registry.Close() + t.Fatal(h) +} + +func TestSetHoliday(t *testing.T) { + err := sr.Connect() + if err != nil { + t.Fatal(err) + } + + err = SetHoliday("元旦", 1, 2022, 1, 1) + if err != nil { + t.Fatal(err) + } + err = SetHoliday("春节", 7, 2022, 1, 31) + if err != nil { + t.Fatal(err) + } + err = SetHoliday("清明节", 1, 2022, 4, 3) + if err != nil { + t.Fatal(err) + } + err = SetHoliday("劳动节", 1, 2022, 4, 30) + if err != nil { + t.Fatal(err) + } + err = SetHoliday("端午节", 1, 2022, 6, 3) + if err != nil { + t.Fatal(err) + } + err = SetHoliday("中秋节", 1, 2022, 9, 10) + if err != nil { + t.Fatal(err) + } + err = SetHoliday("国庆节", 7, 2022, 10, 1) + if err != nil { + t.Fatal(err) + } + + err = sr.Close() + if err != nil { + t.Fatal(err) + } +} + +func SetHoliday(name string, dur, year int, month time.Month, day int) error { + return sr.Set("holiday/"+name, fmt.Sprintf("%d_%d_%d_%d", dur, year, month, day)) +} diff --git a/plugin_moyu/nowork.go b/plugin_moyu/nowork.go index 473a6bca..3f7e653e 100644 --- a/plugin_moyu/nowork.go +++ b/plugin_moyu/nowork.go @@ -4,6 +4,9 @@ import ( "fmt" "strconv" "time" + + reg "github.com/fumiama/go-registry" + "github.com/sirupsen/logrus" ) // Holiday 节日 @@ -18,6 +21,31 @@ func NewHoliday(name string, dur, year int, month time.Month, day int) *Holiday return &Holiday{name: name, date: time.Date(year, month, day, 0, 0, 0, 0, time.Local), dur: time.Duration(dur) * time.Hour * 24} } +var ( + registry = reg.NewRegReader("reilia.eastasia.azurecontainer.io:32664", "fumiama") + holidaymap map[string]*Holiday +) + +// GetHoliday 从 reg 服务器获取节日 +func GetHoliday(name string) *Holiday { + var dur, year int + var month time.Month + var day int + h, ok := holidaymap[name] + if ok { + return h + } + ret, err := registry.Get("holiday/" + name) + if err != nil { + return NewHoliday(name+err.Error(), 0, 0, 0, 0) + } + fmt.Sscanf(ret, "%d_%d_%d_%d", &dur, &year, &month, &day) + logrus.Debugln("[moyu]获取节日:", name, dur, year, month, day) + h = NewHoliday(name, dur, year, month, day) + holidaymap[name] = h + return h +} + // 获取两个时间相差 func (h *Holiday) String() string { d := time.Until(h.date) diff --git a/plugin_moyu/run.go b/plugin_moyu/run.go index 728057ea..b4e32e1c 100644 --- a/plugin_moyu/run.go +++ b/plugin_moyu/run.go @@ -59,6 +59,13 @@ func init() { // 插件主体 func sendNotice() { m, ok := control.Lookup("moyu") if ok { + if holidaymap == nil { + ok = false + if registry.Connect() != nil { + return + } + holidaymap = make(map[string]*Holiday, 32) + } zero.RangeBot(func(id int64, ctx *zero.Ctx) bool { for _, g := range ctx.GetGroupList().Array() { grp := g.Get("group_id").Int() @@ -69,19 +76,19 @@ func sendNotice() { message.Text("上午好,摸鱼人!\n工作再累,一定不要忘记摸鱼哦!有事没事起身去茶水间,去厕所,去廊道走走别老在工位上坐着,钱是老板的,但命是自己的。\n"), message.Text(weekend()), message.Text("\n"), - message.Text(NewHoliday("元旦", 1, 2022, 1, 1)), + message.Text(GetHoliday("元旦")), message.Text("\n"), - message.Text(NewHoliday("春节", 7, 2022, 1, 31)), + message.Text(GetHoliday("春节")), message.Text("\n"), - message.Text(NewHoliday("清明节", 1, 2022, 4, 3)), + message.Text(GetHoliday("清明节")), message.Text("\n"), - message.Text(NewHoliday("劳动节", 1, 2022, 4, 30)), + message.Text(GetHoliday("劳动节")), message.Text("\n"), - message.Text(NewHoliday("端午节", 1, 2022, 6, 3)), + message.Text(GetHoliday("端午节")), message.Text("\n"), - message.Text(NewHoliday("中秋节", 1, 2022, 9, 10)), + message.Text(GetHoliday("中秋节")), message.Text("\n"), - message.Text(NewHoliday("国庆节", 7, 2022, 10, 1)), + message.Text(GetHoliday("国庆节")), message.Text("\n"), message.Text("上班是帮老板赚钱,摸鱼是赚老板的钱!最后,祝愿天下所有摸鱼人,都能愉快的渡过每一天…"), }, @@ -90,5 +97,8 @@ func sendNotice() { } return true }) + if !ok { + _ = registry.Close() + } } }