Add welcome message functionality
(Telegram and whatsapp for now)
This commit is contained in:
@@ -1,43 +1,82 @@
|
||||
package gateway
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"github.com/42wim/matterbridge/bridge/config"
|
||||
)
|
||||
|
||||
// returns true if a command was registered (therefore a should not be relayed
|
||||
func (r *Router) handleCommand(msg *config.Message) bool {
|
||||
switch text := msg.Text; text {
|
||||
case "!chatId":
|
||||
help := `!optout - opt out from all message relaying
|
||||
!optoutmedia - only opt out from relaying attachments
|
||||
!optin - opt back into chat relaying
|
||||
!setwelcome - set channel welcome message (admin)
|
||||
!unsetwelcome - clear channel welcome message (admin)
|
||||
!help - display this message`
|
||||
|
||||
isAdmin := r.isAdmin(msg)
|
||||
addTextFromCaptions(msg)
|
||||
cmd := msg.Text
|
||||
|
||||
switch {
|
||||
case cmd == "!help":
|
||||
r.logger.Debug("!help")
|
||||
r.replyCmd(msg, help)
|
||||
case cmd == "!chatId":
|
||||
r.logger.Infof("!chatId: %s", msg.Channel)
|
||||
case "!optin":
|
||||
case cmd == "!userId":
|
||||
r.logger.Infof("!userId: %s", msg.UserID)
|
||||
case cmd == "!ping":
|
||||
r.logger.Debug("!pong: %s,%s", msg.Channel, msg.UserID)
|
||||
r.replyCmd(msg, "pong!")
|
||||
case cmd == "!pingdm":
|
||||
r.logger.Debug("!pongdm: %s,%s", msg.Channel, msg.UserID)
|
||||
r.replyDM(msg, "pong!")
|
||||
case cmd == "!optin":
|
||||
r.logger.Debugf("!optin: %s", msg.UserID)
|
||||
r.handleOptOutCmd(msg, OptIn)
|
||||
case "!optout":
|
||||
case cmd == "!optout":
|
||||
r.logger.Debugf("!optout: %s", msg.UserID)
|
||||
r.handleOptOutCmd(msg, OptOut)
|
||||
case "!optoutmedia":
|
||||
case cmd == "!optoutmedia":
|
||||
r.logger.Debugf("!optoutmedia: %s", msg.UserID)
|
||||
r.handleOptOutCmd(msg, OptOutMediaOnly)
|
||||
case "!help":
|
||||
r.logger.Debug("!help")
|
||||
help := `!optout - opt out from all message relaying
|
||||
!optoutmedia - only opt out from relaying attachments
|
||||
!optin - opt back into chat relaying
|
||||
!help - display this message`
|
||||
|
||||
r.replyCmd(msg, help)
|
||||
case "!ping":
|
||||
r.logger.Debug("!pong")
|
||||
r.replyCmd(msg, "pong!")
|
||||
case "!pingdm":
|
||||
r.logger.Debug("!pongdm")
|
||||
r.replyDM(msg, "pong!")
|
||||
case isAdmin && strings.HasPrefix(cmd, "!setwelcome"):
|
||||
r.logger.Debugf("!setwelcome: %s - %+v", msg.Channel, msg)
|
||||
r.handleWelcomeCmd(msg, msg)
|
||||
case isAdmin && strings.HasPrefix(cmd, "!unsetwelcome"):
|
||||
r.logger.Debugf("!unsetwelcome: %s", msg.Channel)
|
||||
r.handleWelcomeCmd(msg, nil)
|
||||
case cmd == "!echowelcome":
|
||||
r.logger.Debugf("!echowelcome: %s,%s", msg.Channel, msg.UserID)
|
||||
r.handleEchoWelcomeCmd(msg)
|
||||
default:
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
func (r *Router) isAdmin(msg *config.Message) bool {
|
||||
admins, _ := r.GetStringSlice("Admins")
|
||||
|
||||
for _, ID := range admins {
|
||||
if msg.UserID == ID {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func addTextFromCaptions(msg *config.Message) {
|
||||
for _, f := range msg.Extra["file"] {
|
||||
fi := f.(config.FileInfo)
|
||||
|
||||
msg.Text += fi.Comment
|
||||
}
|
||||
}
|
||||
|
||||
func (r *Router) replyCmd(msg *config.Message, str string) {
|
||||
srcBridge := r.getBridge(msg.Account)
|
||||
|
||||
@@ -71,8 +110,20 @@ func (r *Router) replyDM(msg *config.Message, str string) {
|
||||
srcBridge.Send(reply)
|
||||
}
|
||||
|
||||
func (r *Router) handleOptOutCmd(msg *config.Message, newStaus OptOutStatus) {
|
||||
err := r.setOptOutStatus(msg.UserID, newStaus)
|
||||
func (r *Router) sendDM(msg *config.Message, dmChannel string) {
|
||||
srcBridge := r.getBridge(msg.Account)
|
||||
|
||||
msg.Channel = dmChannel
|
||||
msg.Username = ""
|
||||
msg.UserID = ""
|
||||
msg.ID = ""
|
||||
msg.Event = ""
|
||||
|
||||
srcBridge.Send(*msg)
|
||||
}
|
||||
|
||||
func (r *Router) handleOptOutCmd(msg *config.Message, newStatus OptOutStatus) {
|
||||
err := r.setOptOutStatus(msg.UserID, newStatus)
|
||||
|
||||
reply := "Successfully set message relay preferences."
|
||||
if err != nil {
|
||||
@@ -81,3 +132,40 @@ func (r *Router) handleOptOutCmd(msg *config.Message, newStaus OptOutStatus) {
|
||||
|
||||
r.replyCmd(msg, reply)
|
||||
}
|
||||
|
||||
func (r *Router) handleWelcomeCmd(msg *config.Message, welcomeMsg *config.Message) {
|
||||
|
||||
if welcomeMsg != nil {
|
||||
welcomeMsg.Text = strings.Replace(welcomeMsg.Text, "!setwelcome ", "", 1)
|
||||
|
||||
for i, f := range welcomeMsg.Extra["file"] {
|
||||
fi := f.(config.FileInfo)
|
||||
fi.Comment = strings.Replace(fi.Comment, "!setwelcome ", "", 1)
|
||||
|
||||
welcomeMsg.Extra["file"][i] = fi
|
||||
}
|
||||
}
|
||||
|
||||
err := r.setWelcomeMessage(msg.Channel, welcomeMsg)
|
||||
|
||||
reply := "Successfully set welcome message for channel."
|
||||
if welcomeMsg == nil {
|
||||
reply = "Successfully removed welcome message for channel."
|
||||
}
|
||||
if err != nil {
|
||||
reply = "Error setting channel welcome message, try again later or contact the moderators."
|
||||
}
|
||||
|
||||
r.replyCmd(msg, reply)
|
||||
}
|
||||
|
||||
func (r *Router) handleEchoWelcomeCmd(msg *config.Message) {
|
||||
msg.Event = config.EventWelcomeMsg
|
||||
|
||||
if r.getWelcomeMessage(msg.Channel) == nil {
|
||||
r.replyCmd(msg, "No welcome message configured, set with !setwelcome")
|
||||
return
|
||||
}
|
||||
|
||||
r.handleEventWelcome(msg)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user