93 lines
4.4 KiB
Go
93 lines
4.4 KiB
Go
/*
|
|
* Licensed to the Apache Software Foundation (ASF) under one
|
|
* or more contributor license agreements. See the NOTICE file
|
|
* distributed with this work for additional information
|
|
* regarding copyright ownership. The ASF licenses this file
|
|
* to you under the Apache License, Version 2.0 (the
|
|
* "License"); you may not use this file except in compliance
|
|
* with the License. You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing,
|
|
* software distributed under the License is distributed on an
|
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
* KIND, either express or implied. See the License for the
|
|
* specific language governing permissions and limitations
|
|
* under the License.
|
|
*/
|
|
|
|
package plugin
|
|
|
|
// NotificationType is the type of the notification
|
|
type NotificationType string
|
|
|
|
const (
|
|
NotificationUpdateQuestion NotificationType = "notification.action.update_question"
|
|
NotificationAnswerTheQuestion NotificationType = "notification.action.answer_the_question"
|
|
NotificationUpVotedTheQuestion NotificationType = "notification.action.up_voted_question"
|
|
NotificationDownVotedTheQuestion NotificationType = "notification.action.down_voted_question"
|
|
NotificationUpdateAnswer NotificationType = "notification.action.update_answer"
|
|
NotificationAcceptAnswer NotificationType = "notification.action.accept_answer"
|
|
NotificationUpVotedTheAnswer NotificationType = "notification.action.up_voted_answer"
|
|
NotificationDownVotedTheAnswer NotificationType = "notification.action.down_voted_answer"
|
|
NotificationCommentQuestion NotificationType = "notification.action.comment_question"
|
|
NotificationCommentAnswer NotificationType = "notification.action.comment_answer"
|
|
NotificationUpVotedTheComment NotificationType = "notification.action.up_voted_comment"
|
|
NotificationReplyToYou NotificationType = "notification.action.reply_to_you"
|
|
NotificationMentionYou NotificationType = "notification.action.mention_you"
|
|
NotificationYourQuestionIsClosed NotificationType = "notification.action.your_question_is_closed"
|
|
NotificationYourQuestionWasDeleted NotificationType = "notification.action.your_question_was_deleted"
|
|
NotificationYourAnswerWasDeleted NotificationType = "notification.action.your_answer_was_deleted"
|
|
NotificationYourCommentWasDeleted NotificationType = "notification.action.your_comment_was_deleted"
|
|
NotificationInvitedYouToAnswer NotificationType = "notification.action.invited_you_to_answer"
|
|
NotificationNewQuestion NotificationType = "notification.action.new_question"
|
|
NotificationNewQuestionFollowedTag NotificationType = "notification.action.new_question_followed_tag"
|
|
)
|
|
|
|
type Notification interface {
|
|
Base
|
|
|
|
// GetNewQuestionSubscribers returns the subscribers of the new question notification
|
|
GetNewQuestionSubscribers() (userIDs []string)
|
|
|
|
// Notify sends a notification to the user
|
|
Notify(msg NotificationMessage)
|
|
}
|
|
|
|
type NotificationMessage struct {
|
|
// the type of the notification
|
|
Type NotificationType `json:"notification_type"`
|
|
// the receiver user id
|
|
ReceiverUserID string `json:"receiver_user_id"`
|
|
// the receiver user using language
|
|
ReceiverLang string `json:"receiver_lang"`
|
|
// the receiver user external id (optional)
|
|
ReceiverExternalID string `json:"receiver_external_id"`
|
|
|
|
// Who triggered the notification (optional, admin or system operation will not have this field)
|
|
TriggerUserID string `json:"trigger_user_id"`
|
|
// The trigger user's display name (optional, admin or system operation will not have this field)
|
|
TriggerUserDisplayName string `json:"trigger_user_display_name"`
|
|
// The trigger user's url (optional, admin or system operation will not have this field)
|
|
TriggerUserUrl string `json:"trigger_user_url"`
|
|
|
|
// the question title
|
|
QuestionTitle string `json:"question_title"`
|
|
// the question url
|
|
QuestionUrl string `json:"question_url"`
|
|
// the question tags (comma separated, optional, only for new question notification)
|
|
QuestionTags string `json:"tags"`
|
|
|
|
// the answer url (optional, only for new answer notification)
|
|
AnswerUrl string `json:"answer_url"`
|
|
// the comment url (optional, only for new comment notification)
|
|
CommentUrl string `json:"comment_url"`
|
|
}
|
|
|
|
var (
|
|
// CallNotification is a function that calls all registered notification plugins
|
|
CallNotification,
|
|
registerNotification = MakePlugin[Notification](false)
|
|
)
|