blob: 4c483bcd4a283b5a85c93a5c31dfd805d5dccadc [file] [log] [blame]
/*
* 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)
)