123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- package weeklyhonor
- import (
- "context"
- "errors"
- "fmt"
- "net/url"
- "time"
- "go-common/library/log"
- "go-common/library/xstr"
- )
- const (
- _title = "叮!你有一份荣誉周报待查收!"
- _newYearTitle = "嘭~~~啪!你有一份荣誉周报待查收!"
- _content = "这周的成就已达成,快进来瞅瞅吧~ #{周报传送门}{\"https://member.bilibili.com/studio/annyroal/upper-honor-weekly/my\"}"
- _newYearContent = "这周的成就已达成,元气满满过新年~ #{周报传送门}{\"https://member.bilibili.com/studio/annyroal/upper-honor-weekly/my\"}"
- _notifyDataType = "4" // 消息类型:1、回复我的2、@我3、收到的爱4、业务通知
- _notifyURL = "/api/notify/send.user.notify.do"
- _notifyMC = "1_17_1"
- _upMidsURL = "/x/internal/uper/list_up"
- )
- type newYear struct {
- start, end time.Time
- }
- var (
- ny = newYear{
- start: time.Date(2019, 2, 3, 0, 0, 0, 0, time.Local),
- end: time.Date(2019, 2, 24, 0, 0, 0, 0, time.Local),
- }
- )
- type msgReply struct {
- Code int `json:"code"`
- Data *data `json:"data"`
- }
- type data struct {
- TotalCount int `json:"total_count"`
- ErrorCount int `json:"error_count"`
- ErrorMidList []int64 `json:"error_mid_list"`
- }
- // SendNotify 发送站内信
- func (d *Dao) SendNotify(c context.Context, mids []int64) (errMids []int64, err error) {
- title, content := getTitleAndContent()
- res := msgReply{}
- params := url.Values{}
- params.Set("mc", _notifyMC)
- params.Set("title", title)
- params.Set("data_type", _notifyDataType)
- params.Set("context", content)
- params.Set("mid_list", xstr.JoinInts(mids))
- notifyURI := d.c.Host.Message + _notifyURL
- if err = d.httpClient.Post(c, notifyURI, "", params, &res); err != nil {
- log.Error("d.httpClient.Post(%s,%v,%d)", notifyURI, params, err)
- return
- }
- if res.Code != 0 {
- err = errors.New("code != 0")
- log.Error("d.httpClient.Post(%s,%v,%v,%d)", notifyURI, params, err, res.Code)
- }
- if res.Data != nil {
- errMids = res.Data.ErrorMidList
- log.Info("SendNotify log total_count(%d) error_count(%d) error_mid_list(%v)", res.Data.TotalCount, res.Data.ErrorCount, res.Data.ErrorMidList)
- }
- return
- }
- func getTitleAndContent() (string, string) {
- now := time.Now()
- if now.After(ny.end) || now.Before(ny.start) {
- return _title, _content
- }
- return _newYearTitle, _newYearContent
- }
- // Deprecated: use UpActivesList instead.
- func (d *Dao) UpMids(c context.Context, size int, lastid int64, activeOnly bool) (mids []int64, newid int64, err error) {
- res := &struct {
- Code int `json:"code"`
- Data *struct {
- Result []int64 `json:"result"`
- LastID int64 `json:"last_id"`
- } `json:"data"`
- }{}
- params := url.Values{}
- params.Set("size", fmt.Sprintf("%d", size))
- params.Set("last_id", fmt.Sprintf("%d", lastid))
- if activeOnly {
- // filter by having archive within 180 days
- params.Set("activity", "1,2,3")
- }
- midsURI := d.c.Host.API + _upMidsURL
- if err = d.httpClient.Get(c, midsURI, "", params, &res); err != nil {
- log.Error("d.httpClient.Get(%s,%v,%d)", midsURI+"?"+params.Encode(), params, err)
- return
- }
- if res.Code != 0 {
- err = errors.New("code != 0")
- log.Error("d.httpClient.Get(%s,%v,%v,%d)", midsURI, params, err, res.Code)
- }
- if res != nil && res.Data != nil {
- return res.Data.Result, res.Data.LastID, nil
- }
- return
- }
|