mirror of
https://dev.narayana.im/narayana/telegabber.git
synced 2026-08-05 04:07:07 +00:00
Ping back outgoing commands in MUCs
This commit is contained in:
parent
d6582a888f
commit
5c4c722cdc
2 changed files with 20 additions and 18 deletions
|
|
@ -932,7 +932,7 @@ func (c *Client) GetMUCMemberIdByNickname(chatID int64, nickname string) int64 {
|
||||||
// NewPinnedMessage sends a text message and pins it right away
|
// NewPinnedMessage sends a text message and pins it right away
|
||||||
func (c *Client) NewPinnedMessage(chatID int64, text, returnJid string) bool {
|
func (c *Client) NewPinnedMessage(chatID int64, text, returnJid string) bool {
|
||||||
c.locks.pinOutboxLock.Lock()
|
c.locks.pinOutboxLock.Lock()
|
||||||
msg := c.ProcessOutgoingMessage(chatID, text, returnJid, 0, 0, true, true)
|
msg, _ := c.ProcessOutgoingMessage(chatID, text, returnJid, 0, 0, true, true)
|
||||||
if msg == nil {
|
if msg == nil {
|
||||||
c.locks.pinOutboxLock.Unlock()
|
c.locks.pinOutboxLock.Unlock()
|
||||||
return false
|
return false
|
||||||
|
|
@ -1755,13 +1755,12 @@ func (c *Client) ProcessIncomingMessage(chatId int64, message *client.Message) {
|
||||||
safeToSend = false
|
safeToSend = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
log.Debugf("groupChatFrom: %v groupChatTos: %#v, safeToSend: %v", groupChatFrom, groupChatTos, safeToSend)
|
||||||
if safeToSend {
|
if safeToSend {
|
||||||
c.SendMessageToGateway(chatId, message, "", false, groupChatFrom, groupChatTos)
|
c.SendMessageToGateway(chatId, message, "", false, groupChatFrom, groupChatTos)
|
||||||
} else {
|
} else {
|
||||||
mucJID := gateway.MUCJID(chatId)
|
mucJID := gateway.MUCJID(chatId)
|
||||||
for _, to := range groupChatTos {
|
gateway.SendErrorMessage(c.jid, mucJID, "Cannot show a message", 500, true, c.xmpp)
|
||||||
gateway.SendErrorMessage(to, mucJID, "Cannot show a message", 500, true, c.xmpp)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1935,11 +1934,11 @@ func (c *Client) PrepareOutgoingMessageContent(text string) client.InputMessageC
|
||||||
return c.prepareOutgoingMessageContent(text, nil)
|
return c.prepareOutgoingMessageContent(text, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ProcessOutgoingMessage executes commands or sends messages to mapped chats, returns message id
|
// ProcessOutgoingMessage executes commands or sends messages to mapped chats, returns message id and isCommand
|
||||||
func (c *Client) ProcessOutgoingMessage(chatID int64, text string, returnJid string, replyId int64, replaceId int64, isGroupchat, raw bool) *client.Message {
|
func (c *Client) ProcessOutgoingMessage(chatID int64, text string, returnJid string, replyId int64, replaceId int64, isGroupchat, raw bool) (*client.Message, bool) {
|
||||||
if !c.Online() {
|
if !c.Online() {
|
||||||
// we're offline
|
// we're offline
|
||||||
return nil
|
return nil, false
|
||||||
}
|
}
|
||||||
|
|
||||||
if replaceId == 0 && !raw && (strings.HasPrefix(text, "/") || strings.HasPrefix(text, "!")) {
|
if replaceId == 0 && !raw && (strings.HasPrefix(text, "/") || strings.HasPrefix(text, "!")) {
|
||||||
|
|
@ -1950,7 +1949,7 @@ func (c *Client) ProcessOutgoingMessage(chatID int64, text string, returnJid str
|
||||||
}
|
}
|
||||||
// do not send on success
|
// do not send on success
|
||||||
if isCommand {
|
if isCommand {
|
||||||
return nil
|
return nil, true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1979,24 +1978,24 @@ func (c *Client) ProcessOutgoingMessage(chatID int64, text string, returnJid str
|
||||||
|
|
||||||
if response.StatusCode != 200 {
|
if response.StatusCode != 200 {
|
||||||
c.returnMessage(returnJid, chatID, fmt.Sprintf("Received status code %v", response.StatusCode), response.StatusCode, isGroupchat)
|
c.returnMessage(returnJid, chatID, fmt.Sprintf("Received status code %v", response.StatusCode), response.StatusCode, isGroupchat)
|
||||||
return nil
|
return nil, false
|
||||||
}
|
}
|
||||||
|
|
||||||
tempDir, err := ioutil.TempDir("", "telegabber-*")
|
tempDir, err := ioutil.TempDir("", "telegabber-*")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.returnError(returnJid, chatID, "Failed to create a temporary directory", err, 500, isGroupchat)
|
c.returnError(returnJid, chatID, "Failed to create a temporary directory", err, 500, isGroupchat)
|
||||||
return nil
|
return nil, false
|
||||||
}
|
}
|
||||||
tempFile, err := os.Create(filepath.Join(tempDir, filepath.Base(text)))
|
tempFile, err := os.Create(filepath.Join(tempDir, filepath.Base(text)))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.returnError(returnJid, chatID, "Failed to create a temporary file", err, 500, isGroupchat)
|
c.returnError(returnJid, chatID, "Failed to create a temporary file", err, 500, isGroupchat)
|
||||||
return nil
|
return nil, false
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = io.Copy(tempFile, response.Body)
|
_, err = io.Copy(tempFile, response.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.returnError(returnJid, chatID, "Failed to write a temporary file", err, 500, isGroupchat)
|
c.returnError(returnJid, chatID, "Failed to write a temporary file", err, 500, isGroupchat)
|
||||||
return nil
|
return nil, false
|
||||||
}
|
}
|
||||||
|
|
||||||
file = &client.InputFileLocal{
|
file = &client.InputFileLocal{
|
||||||
|
|
@ -2025,9 +2024,9 @@ func (c *Client) ProcessOutgoingMessage(chatID int64, text string, returnJid str
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.returnError(returnJid, chatID, "Not edited", err, 400, isGroupchat)
|
c.returnError(returnJid, chatID, "Not edited", err, 400, isGroupchat)
|
||||||
return nil
|
return nil, false
|
||||||
}
|
}
|
||||||
return tgMessage
|
return tgMessage, false
|
||||||
}
|
}
|
||||||
|
|
||||||
tgMessage, err := c.client.SendMessage(&client.SendMessageRequest{
|
tgMessage, err := c.client.SendMessage(&client.SendMessageRequest{
|
||||||
|
|
@ -2037,9 +2036,9 @@ func (c *Client) ProcessOutgoingMessage(chatID int64, text string, returnJid str
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.returnError(returnJid, chatID, "Not sent", err, 400, isGroupchat)
|
c.returnError(returnJid, chatID, "Not sent", err, 400, isGroupchat)
|
||||||
return nil
|
return nil, false
|
||||||
}
|
}
|
||||||
return tgMessage
|
return tgMessage, false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) returnMessage(returnJid string, chatID int64, text string, code int, isGroupchat bool) {
|
func (c *Client) returnMessage(returnJid string, chatID int64, text string, code int, isGroupchat bool) {
|
||||||
|
|
|
||||||
|
|
@ -264,7 +264,7 @@ func HandleMessage(s xmpp.Sender, p stanza.Packet) {
|
||||||
|
|
||||||
session.SendMessageLock.Lock()
|
session.SendMessageLock.Lock()
|
||||||
defer session.SendMessageLock.Unlock()
|
defer session.SendMessageLock.Unlock()
|
||||||
tgMessage := session.ProcessOutgoingMessage(toID, text, msg.From, replyId, replaceId, isGroupchat, false)
|
tgMessage, isCommand := session.ProcessOutgoingMessage(toID, text, msg.From, replyId, replaceId, isGroupchat, false)
|
||||||
if tgMessage != nil {
|
if tgMessage != nil {
|
||||||
if replaceId != 0 {
|
if replaceId != 0 {
|
||||||
// not needed (is it persistent among clients though?)
|
// not needed (is it persistent among clients though?)
|
||||||
|
|
@ -294,6 +294,9 @@ func HandleMessage(s xmpp.Sender, p stanza.Packet) {
|
||||||
[]string{msg.From},
|
[]string{msg.From},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
} else if isCommand && isGroupchat && session.Session.MUC {
|
||||||
|
// pong outgoing commands back to groupchats
|
||||||
|
gateway.SendMessage(msg.From, msg.To + "/" + session.GetMUCNickname(0), text, "", component, nil, 0, "", false, isGroupchat, false, "", "")
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
// if a message failed to edit on Telegram side, match new XMPP ID with old Telegram ID anyway
|
// if a message failed to edit on Telegram side, match new XMPP ID with old Telegram ID anyway
|
||||||
|
|
@ -1540,7 +1543,7 @@ func handleSetQueryCommand(s xmpp.Sender, iq *stanza.IQ, command *stanza.Command
|
||||||
if ok {
|
if ok {
|
||||||
msgText := "/" + form.Fields[0].ValuesList[0]
|
msgText := "/" + form.Fields[0].ValuesList[0]
|
||||||
session.LastBotCmdString = msgText
|
session.LastBotCmdString = msgText
|
||||||
tgMessage := session.ProcessOutgoingMessage(toId, msgText, iq.From, 0, 0, false, true)
|
tgMessage, _ := session.ProcessOutgoingMessage(toId, msgText, iq.From, 0, 0, false, true)
|
||||||
if tgMessage != nil {
|
if tgMessage != nil {
|
||||||
payload.Status = stanza.CommandStatusCompleted
|
payload.Status = stanza.CommandStatusCompleted
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue