/* Package events for community events handling. See more https://vk.com/dev/groups_events */ package events // import "github.com/SevereCloud/vksdk/v2/events" import ( "context" "encoding/json" "github.com/SevereCloud/vksdk/v2/internal" ) // EventType type. type EventType string // EventType list. const ( EventConfirmation = "confirmation" EventMessageNew = "message_new" EventMessageReply = "message_reply" EventMessageEdit = "message_edit" EventMessageAllow = "message_allow" EventMessageDeny = "message_deny" EventMessageTypingState = "message_typing_state" EventMessageEvent = "message_event" EventPhotoNew = "photo_new" EventPhotoCommentNew = "photo_comment_new" EventPhotoCommentEdit = "photo_comment_edit" EventPhotoCommentRestore = "photo_comment_restore" EventPhotoCommentDelete = "photo_comment_delete" EventAudioNew = "audio_new" EventVideoNew = "video_new" EventVideoCommentNew = "video_comment_new" EventVideoCommentEdit = "video_comment_edit" EventVideoCommentRestore = "video_comment_restore" EventVideoCommentDelete = "video_comment_delete" EventWallPostNew = "wall_post_new" EventWallRepost = "wall_repost" EventWallReplyNew = "wall_reply_new" EventWallReplyEdit = "wall_reply_edit" EventWallReplyRestore = "wall_reply_restore" EventWallReplyDelete = "wall_reply_delete" EventBoardPostNew = "board_post_new" EventBoardPostEdit = "board_post_edit" EventBoardPostRestore = "board_post_restore" EventBoardPostDelete = "board_post_delete" EventMarketCommentNew = "market_comment_new" EventMarketCommentEdit = "market_comment_edit" EventMarketCommentRestore = "market_comment_restore" EventMarketCommentDelete = "market_comment_delete" EventMarketOrderNew = "market_order_new" EventMarketOrderEdit = "market_order_edit" EventGroupLeave = "group_leave" EventGroupJoin = "group_join" EventUserBlock = "user_block" EventUserUnblock = "user_unblock" EventPollVoteNew = "poll_vote_new" EventGroupOfficersEdit = "group_officers_edit" EventGroupChangeSettings = "group_change_settings" EventGroupChangePhoto = "group_change_photo" EventVkpayTransaction = "vkpay_transaction" EventLeadFormsNew = "lead_forms_new" EventAppPayload = "app_payload" EventMessageRead = "message_read" EventLikeAdd = "like_add" EventLikeRemove = "like_remove" EventDonutSubscriptionCreate = "donut_subscription_create" EventDonutSubscriptionProlonged = "donut_subscription_prolonged" EventDonutSubscriptionExpired = "donut_subscription_expired" EventDonutSubscriptionCancelled = "donut_subscription_cancelled" EventDonutSubscriptionPriceChanged = "donut_subscription_price_changed" EventDonutMoneyWithdraw = "donut_money_withdraw" EventDonutMoneyWithdrawError = "donut_money_withdraw_error" ) // GroupEvent struct. type GroupEvent struct { Type EventType `json:"type"` Object json.RawMessage `json:"object"` GroupID int `json:"group_id"` EventID string `json:"event_id"` Secret string `json:"secret"` } // FuncList struct. type FuncList struct { messageNew []func(context.Context, MessageNewObject) messageReply []func(context.Context, MessageReplyObject) messageEdit []func(context.Context, MessageEditObject) messageAllow []func(context.Context, MessageAllowObject) messageDeny []func(context.Context, MessageDenyObject) messageTypingState []func(context.Context, MessageTypingStateObject) messageEvent []func(context.Context, MessageEventObject) photoNew []func(context.Context, PhotoNewObject) photoCommentNew []func(context.Context, PhotoCommentNewObject) photoCommentEdit []func(context.Context, PhotoCommentEditObject) photoCommentRestore []func(context.Context, PhotoCommentRestoreObject) photoCommentDelete []func(context.Context, PhotoCommentDeleteObject) audioNew []func(context.Context, AudioNewObject) videoNew []func(context.Context, VideoNewObject) videoCommentNew []func(context.Context, VideoCommentNewObject) videoCommentEdit []func(context.Context, VideoCommentEditObject) videoCommentRestore []func(context.Context, VideoCommentRestoreObject) videoCommentDelete []func(context.Context, VideoCommentDeleteObject) wallPostNew []func(context.Context, WallPostNewObject) wallRepost []func(context.Context, WallRepostObject) wallReplyNew []func(context.Context, WallReplyNewObject) wallReplyEdit []func(context.Context, WallReplyEditObject) wallReplyRestore []func(context.Context, WallReplyRestoreObject) wallReplyDelete []func(context.Context, WallReplyDeleteObject) boardPostNew []func(context.Context, BoardPostNewObject) boardPostEdit []func(context.Context, BoardPostEditObject) boardPostRestore []func(context.Context, BoardPostRestoreObject) boardPostDelete []func(context.Context, BoardPostDeleteObject) marketCommentNew []func(context.Context, MarketCommentNewObject) marketCommentEdit []func(context.Context, MarketCommentEditObject) marketCommentRestore []func(context.Context, MarketCommentRestoreObject) marketCommentDelete []func(context.Context, MarketCommentDeleteObject) marketOrderNew []func(context.Context, MarketOrderNewObject) marketOrderEdit []func(context.Context, MarketOrderEditObject) groupLeave []func(context.Context, GroupLeaveObject) groupJoin []func(context.Context, GroupJoinObject) userBlock []func(context.Context, UserBlockObject) userUnblock []func(context.Context, UserUnblockObject) pollVoteNew []func(context.Context, PollVoteNewObject) groupOfficersEdit []func(context.Context, GroupOfficersEditObject) groupChangeSettings []func(context.Context, GroupChangeSettingsObject) groupChangePhoto []func(context.Context, GroupChangePhotoObject) vkpayTransaction []func(context.Context, VkpayTransactionObject) leadFormsNew []func(context.Context, LeadFormsNewObject) appPayload []func(context.Context, AppPayloadObject) messageRead []func(context.Context, MessageReadObject) likeAdd []func(context.Context, LikeAddObject) likeRemove []func(context.Context, LikeRemoveObject) donutSubscriptionCreate []func(context.Context, DonutSubscriptionCreateObject) donutSubscriptionProlonged []func(context.Context, DonutSubscriptionProlongedObject) donutSubscriptionExpired []func(context.Context, DonutSubscriptionExpiredObject) donutSubscriptionCancelled []func(context.Context, DonutSubscriptionCancelledObject) donutSubscriptionPriceChanged []func(context.Context, DonutSubscriptionPriceChangedObject) donutMoneyWithdraw []func(context.Context, DonutMoneyWithdrawObject) donutMoneyWithdrawError []func(context.Context, DonutMoneyWithdrawErrorObject) special map[EventType][]func(context.Context, GroupEvent) eventsList []EventType goroutine bool } // NewFuncList returns a new FuncList. func NewFuncList() *FuncList { return &FuncList{ special: make(map[EventType][]func(context.Context, GroupEvent)), } } // Handler group event handler. func (fl FuncList) Handler(ctx context.Context, e GroupEvent) error { // nolint:gocyclo ctx = context.WithValue(ctx, internal.GroupIDKey, e.GroupID) ctx = context.WithValue(ctx, internal.EventIDKey, e.EventID) if sliceFunc, ok := fl.special[e.Type]; ok { for _, f := range sliceFunc { if fl.goroutine { go func() { f(ctx, e) }() } else { f(ctx, e) } } } switch e.Type { case EventMessageNew: var obj MessageNewObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.messageNew { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventMessageReply: var obj MessageReplyObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.messageReply { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventMessageEdit: var obj MessageEditObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.messageEdit { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventMessageAllow: var obj MessageAllowObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.messageAllow { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventMessageDeny: var obj MessageDenyObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.messageDeny { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventMessageTypingState: // На основе ответа var obj MessageTypingStateObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.messageTypingState { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventMessageEvent: var obj MessageEventObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.messageEvent { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventPhotoNew: var obj PhotoNewObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.photoNew { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventPhotoCommentNew: var obj PhotoCommentNewObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.photoCommentNew { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventPhotoCommentEdit: var obj PhotoCommentEditObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.photoCommentEdit { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventPhotoCommentRestore: var obj PhotoCommentRestoreObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.photoCommentRestore { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventPhotoCommentDelete: var obj PhotoCommentDeleteObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.photoCommentDelete { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventAudioNew: var obj AudioNewObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.audioNew { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventVideoNew: var obj VideoNewObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.videoNew { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventVideoCommentNew: var obj VideoCommentNewObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.videoCommentNew { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventVideoCommentEdit: var obj VideoCommentEditObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.videoCommentEdit { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventVideoCommentRestore: var obj VideoCommentRestoreObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.videoCommentRestore { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventVideoCommentDelete: var obj VideoCommentDeleteObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.videoCommentDelete { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventWallPostNew: var obj WallPostNewObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.wallPostNew { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventWallRepost: var obj WallRepostObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.wallRepost { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventWallReplyNew: var obj WallReplyNewObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.wallReplyNew { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventWallReplyEdit: var obj WallReplyEditObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.wallReplyEdit { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventWallReplyRestore: var obj WallReplyRestoreObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.wallReplyRestore { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventWallReplyDelete: var obj WallReplyDeleteObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.wallReplyDelete { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventBoardPostNew: var obj BoardPostNewObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.boardPostNew { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventBoardPostEdit: var obj BoardPostEditObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.boardPostEdit { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventBoardPostRestore: var obj BoardPostRestoreObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.boardPostRestore { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventBoardPostDelete: var obj BoardPostDeleteObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.boardPostDelete { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventMarketCommentNew: var obj MarketCommentNewObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.marketCommentNew { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventMarketCommentEdit: var obj MarketCommentEditObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.marketCommentEdit { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventMarketCommentRestore: var obj MarketCommentRestoreObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.marketCommentRestore { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventMarketCommentDelete: var obj MarketCommentDeleteObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.marketCommentDelete { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventMarketOrderNew: var obj MarketOrderNewObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.marketOrderNew { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventMarketOrderEdit: var obj MarketOrderEditObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.marketOrderEdit { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventGroupLeave: var obj GroupLeaveObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.groupLeave { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventGroupJoin: var obj GroupJoinObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.groupJoin { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventUserBlock: var obj UserBlockObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.userBlock { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventUserUnblock: var obj UserUnblockObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.userUnblock { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventPollVoteNew: var obj PollVoteNewObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.pollVoteNew { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventGroupOfficersEdit: var obj GroupOfficersEditObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.groupOfficersEdit { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventGroupChangeSettings: var obj GroupChangeSettingsObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.groupChangeSettings { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventGroupChangePhoto: var obj GroupChangePhotoObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.groupChangePhoto { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventVkpayTransaction: var obj VkpayTransactionObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.vkpayTransaction { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventLeadFormsNew: var obj LeadFormsNewObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.leadFormsNew { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventAppPayload: var obj AppPayloadObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.appPayload { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventMessageRead: var obj MessageReadObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.messageRead { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventLikeAdd: var obj LikeAddObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.likeAdd { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventLikeRemove: var obj LikeRemoveObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.likeRemove { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventDonutSubscriptionCreate: var obj DonutSubscriptionCreateObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.donutSubscriptionCreate { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventDonutSubscriptionProlonged: var obj DonutSubscriptionProlongedObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.donutSubscriptionProlonged { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventDonutSubscriptionExpired: var obj DonutSubscriptionExpiredObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.donutSubscriptionExpired { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventDonutSubscriptionCancelled: var obj DonutSubscriptionCancelledObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.donutSubscriptionCancelled { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventDonutSubscriptionPriceChanged: var obj DonutSubscriptionPriceChangedObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.donutSubscriptionPriceChanged { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventDonutMoneyWithdraw: var obj DonutMoneyWithdrawObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.donutMoneyWithdraw { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } case EventDonutMoneyWithdrawError: var obj DonutMoneyWithdrawErrorObject if err := json.Unmarshal(e.Object, &obj); err != nil { return err } for _, f := range fl.donutMoneyWithdrawError { if fl.goroutine { go func() { f(ctx, obj) }() } else { f(ctx, obj) } } } return nil } // ListEvents return list of events. func (fl FuncList) ListEvents() []EventType { return fl.eventsList } // Goroutine invoke functions in a goroutine. func (fl *FuncList) Goroutine(v bool) { fl.goroutine = v } // OnEvent handler. func (fl *FuncList) OnEvent(eventType EventType, f func(context.Context, GroupEvent)) { if fl.special == nil { fl.special = make(map[EventType][]func(context.Context, GroupEvent)) } fl.special[eventType] = append(fl.special[eventType], f) fl.eventsList = append(fl.eventsList, eventType) } // MessageNew handler. func (fl *FuncList) MessageNew(f func(context.Context, MessageNewObject)) { fl.messageNew = append(fl.messageNew, f) fl.eventsList = append(fl.eventsList, EventMessageNew) } // MessageReply handler. func (fl *FuncList) MessageReply(f func(context.Context, MessageReplyObject)) { fl.messageReply = append(fl.messageReply, f) fl.eventsList = append(fl.eventsList, EventMessageReply) } // MessageEdit handler. func (fl *FuncList) MessageEdit(f func(context.Context, MessageEditObject)) { fl.messageEdit = append(fl.messageEdit, f) fl.eventsList = append(fl.eventsList, EventMessageEdit) } // MessageAllow handler. func (fl *FuncList) MessageAllow(f func(context.Context, MessageAllowObject)) { fl.messageAllow = append(fl.messageAllow, f) fl.eventsList = append(fl.eventsList, EventMessageAllow) } // MessageDeny handler. func (fl *FuncList) MessageDeny(f func(context.Context, MessageDenyObject)) { fl.messageDeny = append(fl.messageDeny, f) fl.eventsList = append(fl.eventsList, EventMessageDeny) } // MessageTypingState handler. func (fl *FuncList) MessageTypingState(f func(context.Context, MessageTypingStateObject)) { fl.messageTypingState = append(fl.messageTypingState, f) fl.eventsList = append(fl.eventsList, EventMessageTypingState) } // MessageEvent handler. func (fl *FuncList) MessageEvent(f func(context.Context, MessageEventObject)) { fl.messageEvent = append(fl.messageEvent, f) fl.eventsList = append(fl.eventsList, EventMessageEvent) } // PhotoNew handler. func (fl *FuncList) PhotoNew(f func(context.Context, PhotoNewObject)) { fl.photoNew = append(fl.photoNew, f) fl.eventsList = append(fl.eventsList, EventPhotoNew) } // PhotoCommentNew handler. func (fl *FuncList) PhotoCommentNew(f func(context.Context, PhotoCommentNewObject)) { fl.photoCommentNew = append(fl.photoCommentNew, f) fl.eventsList = append(fl.eventsList, EventPhotoCommentNew) } // PhotoCommentEdit handler. func (fl *FuncList) PhotoCommentEdit(f func(context.Context, PhotoCommentEditObject)) { fl.photoCommentEdit = append(fl.photoCommentEdit, f) fl.eventsList = append(fl.eventsList, EventPhotoCommentEdit) } // PhotoCommentRestore handler. func (fl *FuncList) PhotoCommentRestore(f func(context.Context, PhotoCommentRestoreObject)) { fl.photoCommentRestore = append(fl.photoCommentRestore, f) fl.eventsList = append(fl.eventsList, EventPhotoCommentRestore) } // PhotoCommentDelete handler. func (fl *FuncList) PhotoCommentDelete(f func(context.Context, PhotoCommentDeleteObject)) { fl.photoCommentDelete = append(fl.photoCommentDelete, f) fl.eventsList = append(fl.eventsList, EventPhotoCommentDelete) } // AudioNew handler. func (fl *FuncList) AudioNew(f func(context.Context, AudioNewObject)) { fl.audioNew = append(fl.audioNew, f) fl.eventsList = append(fl.eventsList, EventAudioNew) } // VideoNew handler. func (fl *FuncList) VideoNew(f func(context.Context, VideoNewObject)) { fl.videoNew = append(fl.videoNew, f) fl.eventsList = append(fl.eventsList, EventVideoNew) } // VideoCommentNew handler. func (fl *FuncList) VideoCommentNew(f func(context.Context, VideoCommentNewObject)) { fl.videoCommentNew = append(fl.videoCommentNew, f) fl.eventsList = append(fl.eventsList, EventVideoCommentNew) } // VideoCommentEdit handler. func (fl *FuncList) VideoCommentEdit(f func(context.Context, VideoCommentEditObject)) { fl.videoCommentEdit = append(fl.videoCommentEdit, f) fl.eventsList = append(fl.eventsList, EventVideoCommentEdit) } // VideoCommentRestore handler. func (fl *FuncList) VideoCommentRestore(f func(context.Context, VideoCommentRestoreObject)) { fl.videoCommentRestore = append(fl.videoCommentRestore, f) fl.eventsList = append(fl.eventsList, EventVideoCommentRestore) } // VideoCommentDelete handler. func (fl *FuncList) VideoCommentDelete(f func(context.Context, VideoCommentDeleteObject)) { fl.videoCommentDelete = append(fl.videoCommentDelete, f) fl.eventsList = append(fl.eventsList, EventVideoCommentDelete) } // WallPostNew handler. func (fl *FuncList) WallPostNew(f func(context.Context, WallPostNewObject)) { fl.wallPostNew = append(fl.wallPostNew, f) fl.eventsList = append(fl.eventsList, EventWallPostNew) } // WallRepost handler. func (fl *FuncList) WallRepost(f func(context.Context, WallRepostObject)) { fl.wallRepost = append(fl.wallRepost, f) fl.eventsList = append(fl.eventsList, EventWallRepost) } // WallReplyNew handler. func (fl *FuncList) WallReplyNew(f func(context.Context, WallReplyNewObject)) { fl.wallReplyNew = append(fl.wallReplyNew, f) fl.eventsList = append(fl.eventsList, EventWallReplyNew) } // WallReplyEdit handler. func (fl *FuncList) WallReplyEdit(f func(context.Context, WallReplyEditObject)) { fl.wallReplyEdit = append(fl.wallReplyEdit, f) fl.eventsList = append(fl.eventsList, EventWallReplyEdit) } // WallReplyRestore handler. func (fl *FuncList) WallReplyRestore(f func(context.Context, WallReplyRestoreObject)) { fl.wallReplyRestore = append(fl.wallReplyRestore, f) fl.eventsList = append(fl.eventsList, EventWallReplyRestore) } // WallReplyDelete handler. func (fl *FuncList) WallReplyDelete(f func(context.Context, WallReplyDeleteObject)) { fl.wallReplyDelete = append(fl.wallReplyDelete, f) fl.eventsList = append(fl.eventsList, EventWallReplyDelete) } // BoardPostNew handler. func (fl *FuncList) BoardPostNew(f func(context.Context, BoardPostNewObject)) { fl.boardPostNew = append(fl.boardPostNew, f) fl.eventsList = append(fl.eventsList, EventBoardPostNew) } // BoardPostEdit handler. func (fl *FuncList) BoardPostEdit(f func(context.Context, BoardPostEditObject)) { fl.boardPostEdit = append(fl.boardPostEdit, f) fl.eventsList = append(fl.eventsList, EventBoardPostEdit) } // BoardPostRestore handler. func (fl *FuncList) BoardPostRestore(f func(context.Context, BoardPostRestoreObject)) { fl.boardPostRestore = append(fl.boardPostRestore, f) fl.eventsList = append(fl.eventsList, EventBoardPostRestore) } // BoardPostDelete handler. func (fl *FuncList) BoardPostDelete(f func(context.Context, BoardPostDeleteObject)) { fl.boardPostDelete = append(fl.boardPostDelete, f) fl.eventsList = append(fl.eventsList, EventBoardPostDelete) } // MarketCommentNew handler. func (fl *FuncList) MarketCommentNew(f func(context.Context, MarketCommentNewObject)) { fl.marketCommentNew = append(fl.marketCommentNew, f) fl.eventsList = append(fl.eventsList, EventMarketCommentNew) } // MarketCommentEdit handler. func (fl *FuncList) MarketCommentEdit(f func(context.Context, MarketCommentEditObject)) { fl.marketCommentEdit = append(fl.marketCommentEdit, f) fl.eventsList = append(fl.eventsList, EventMarketCommentEdit) } // MarketCommentRestore handler. func (fl *FuncList) MarketCommentRestore(f func(context.Context, MarketCommentRestoreObject)) { fl.marketCommentRestore = append(fl.marketCommentRestore, f) fl.eventsList = append(fl.eventsList, EventMarketCommentRestore) } // MarketCommentDelete handler. func (fl *FuncList) MarketCommentDelete(f func(context.Context, MarketCommentDeleteObject)) { fl.marketCommentDelete = append(fl.marketCommentDelete, f) fl.eventsList = append(fl.eventsList, EventMarketCommentDelete) } // MarketOrderNew handler. func (fl *FuncList) MarketOrderNew(f func(context.Context, MarketOrderNewObject)) { fl.marketOrderNew = append(fl.marketOrderNew, f) fl.eventsList = append(fl.eventsList, EventMarketOrderNew) } // MarketOrderEdit handler. func (fl *FuncList) MarketOrderEdit(f func(context.Context, MarketOrderEditObject)) { fl.marketOrderEdit = append(fl.marketOrderEdit, f) fl.eventsList = append(fl.eventsList, EventMarketOrderEdit) } // GroupLeave handler. func (fl *FuncList) GroupLeave(f func(context.Context, GroupLeaveObject)) { fl.groupLeave = append(fl.groupLeave, f) fl.eventsList = append(fl.eventsList, EventGroupLeave) } // GroupJoin handler. func (fl *FuncList) GroupJoin(f func(context.Context, GroupJoinObject)) { fl.groupJoin = append(fl.groupJoin, f) fl.eventsList = append(fl.eventsList, EventGroupJoin) } // UserBlock handler. func (fl *FuncList) UserBlock(f func(context.Context, UserBlockObject)) { fl.userBlock = append(fl.userBlock, f) fl.eventsList = append(fl.eventsList, EventUserBlock) } // UserUnblock handler. func (fl *FuncList) UserUnblock(f func(context.Context, UserUnblockObject)) { fl.userUnblock = append(fl.userUnblock, f) fl.eventsList = append(fl.eventsList, EventUserUnblock) } // PollVoteNew handler. func (fl *FuncList) PollVoteNew(f func(context.Context, PollVoteNewObject)) { fl.pollVoteNew = append(fl.pollVoteNew, f) fl.eventsList = append(fl.eventsList, EventPollVoteNew) } // GroupOfficersEdit handler. func (fl *FuncList) GroupOfficersEdit(f func(context.Context, GroupOfficersEditObject)) { fl.groupOfficersEdit = append(fl.groupOfficersEdit, f) fl.eventsList = append(fl.eventsList, EventGroupOfficersEdit) } // GroupChangeSettings handler. func (fl *FuncList) GroupChangeSettings(f func(context.Context, GroupChangeSettingsObject)) { fl.groupChangeSettings = append(fl.groupChangeSettings, f) fl.eventsList = append(fl.eventsList, EventGroupChangeSettings) } // GroupChangePhoto handler. func (fl *FuncList) GroupChangePhoto(f func(context.Context, GroupChangePhotoObject)) { fl.groupChangePhoto = append(fl.groupChangePhoto, f) fl.eventsList = append(fl.eventsList, EventGroupChangePhoto) } // VkpayTransaction handler. func (fl *FuncList) VkpayTransaction(f func(context.Context, VkpayTransactionObject)) { fl.vkpayTransaction = append(fl.vkpayTransaction, f) fl.eventsList = append(fl.eventsList, EventVkpayTransaction) } // LeadFormsNew handler. func (fl *FuncList) LeadFormsNew(f func(context.Context, LeadFormsNewObject)) { fl.leadFormsNew = append(fl.leadFormsNew, f) fl.eventsList = append(fl.eventsList, EventLeadFormsNew) } // AppPayload handler. func (fl *FuncList) AppPayload(f func(context.Context, AppPayloadObject)) { fl.appPayload = append(fl.appPayload, f) fl.eventsList = append(fl.eventsList, EventAppPayload) } // MessageRead handler. func (fl *FuncList) MessageRead(f func(context.Context, MessageReadObject)) { fl.messageRead = append(fl.messageRead, f) fl.eventsList = append(fl.eventsList, EventMessageRead) } // LikeAdd handler. func (fl *FuncList) LikeAdd(f func(context.Context, LikeAddObject)) { fl.likeAdd = append(fl.likeAdd, f) fl.eventsList = append(fl.eventsList, EventLikeAdd) } // LikeRemove handler. func (fl *FuncList) LikeRemove(f func(context.Context, LikeRemoveObject)) { fl.likeRemove = append(fl.likeRemove, f) fl.eventsList = append(fl.eventsList, EventLikeRemove) } // DonutSubscriptionCreate handler. func (fl *FuncList) DonutSubscriptionCreate(f func(context.Context, DonutSubscriptionCreateObject)) { fl.donutSubscriptionCreate = append(fl.donutSubscriptionCreate, f) fl.eventsList = append(fl.eventsList, EventDonutSubscriptionCreate) } // DonutSubscriptionProlonged handler. func (fl *FuncList) DonutSubscriptionProlonged(f func(context.Context, DonutSubscriptionProlongedObject)) { fl.donutSubscriptionProlonged = append(fl.donutSubscriptionProlonged, f) fl.eventsList = append(fl.eventsList, EventDonutSubscriptionProlonged) } // DonutSubscriptionExpired handler. func (fl *FuncList) DonutSubscriptionExpired(f func(context.Context, DonutSubscriptionExpiredObject)) { fl.donutSubscriptionExpired = append(fl.donutSubscriptionExpired, f) fl.eventsList = append(fl.eventsList, EventDonutSubscriptionExpired) } // DonutSubscriptionCancelled handler. func (fl *FuncList) DonutSubscriptionCancelled(f func(context.Context, DonutSubscriptionCancelledObject)) { fl.donutSubscriptionCancelled = append(fl.donutSubscriptionCancelled, f) fl.eventsList = append(fl.eventsList, EventDonutSubscriptionCancelled) } // DonutSubscriptionPriceChanged handler. func (fl *FuncList) DonutSubscriptionPriceChanged(f func(context.Context, DonutSubscriptionPriceChangedObject)) { fl.donutSubscriptionPriceChanged = append(fl.donutSubscriptionPriceChanged, f) fl.eventsList = append(fl.eventsList, EventDonutSubscriptionPriceChanged) } // DonutMoneyWithdraw handler. func (fl *FuncList) DonutMoneyWithdraw(f func(context.Context, DonutMoneyWithdrawObject)) { fl.donutMoneyWithdraw = append(fl.donutMoneyWithdraw, f) fl.eventsList = append(fl.eventsList, EventDonutMoneyWithdraw) } // DonutMoneyWithdrawError handler. func (fl *FuncList) DonutMoneyWithdrawError(f func(context.Context, DonutMoneyWithdrawErrorObject)) { fl.donutMoneyWithdrawError = append(fl.donutMoneyWithdrawError, f) fl.eventsList = append(fl.eventsList, EventDonutMoneyWithdrawError) }