group message support - text WIP
This commit is contained in:
parent
7e53697945
commit
93b7dc12f6
|
@ -29,6 +29,7 @@ func (c *Config) Start() error {
|
|||
router.NewRoute().IQNamespaces(stanza.NSDiscoItems).HandlerFunc(c.handleDiscoItems)
|
||||
router.HandleFunc("iq", c.handleIQ)
|
||||
router.HandleFunc("message", c.handleMessage)
|
||||
router.HandleFunc("presence", c.handleMessage)
|
||||
|
||||
c.xmpp, err = xmpp.NewComponent(xmpp.ComponentOptions{
|
||||
Domain: c.Host,
|
||||
|
|
|
@ -31,6 +31,7 @@ func (c *Config) handleDiscoInfo(s xmpp.Sender, p stanza.Packet) {
|
|||
{Var: stanza.NSMsgReceipts},
|
||||
{Var: stanza.NSMsgChatMarkers},
|
||||
{Var: stanza.NSMsgChatStateNotifications},
|
||||
{Var: "http://jabber.org/protocol/muc"},
|
||||
},
|
||||
}
|
||||
if discoInfo.Node == "" {
|
||||
|
@ -98,15 +99,20 @@ func (c *Config) handleIQ(s xmpp.Sender, p stanza.Packet) {
|
|||
}
|
||||
func (c *Config) handleMessage(s xmpp.Sender, p stanza.Packet) {
|
||||
msg, ok := p.(stanza.Message)
|
||||
attr := msg.Attrs
|
||||
if !ok {
|
||||
return
|
||||
pr, ok := p.(stanza.Message)
|
||||
attr = pr.Attrs
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
}
|
||||
if c.XMPPDebug {
|
||||
log.WithFields(map[string]interface{}{
|
||||
"type": c.Type,
|
||||
"from": s,
|
||||
"to": msg.To,
|
||||
"id": msg.Id,
|
||||
"to": attr.To,
|
||||
"id": attr.Id,
|
||||
}).Debug(msg.XMPPFormat())
|
||||
}
|
||||
c.comp.Send(p)
|
||||
|
|
|
@ -26,8 +26,8 @@ func (t *Threema) getBot(jid *models.JID) *Bot {
|
|||
if db := database.Read; db != nil && db.DB().Ping() == nil {
|
||||
if err := db.Where(jid).First(jid); err.RecordNotFound() {
|
||||
database.Write.Create(jid)
|
||||
} else if err != nil {
|
||||
log.Errorf("error getting jid %s from datatbase: %s", jid.String(), err.Error)
|
||||
} else if err.Error != nil {
|
||||
log.Errorf("error getting jid %s from database: %s", jid.String(), err.Error)
|
||||
}
|
||||
}
|
||||
bot := &Bot{
|
||||
|
|
|
@ -67,6 +67,9 @@ func (t *Threema) Send(packet stanza.Packet) {
|
|||
}
|
||||
func (t *Threema) send(packet stanza.Packet) stanza.Packet {
|
||||
switch p := packet.(type) {
|
||||
case stanza.Presence:
|
||||
log.Debug(p)
|
||||
return nil
|
||||
case stanza.Message:
|
||||
from := models.ParseJID(p.Attrs.From)
|
||||
to := models.ParseJID(p.Attrs.To)
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
package threema
|
||||
|
||||
import (
|
||||
"encoding/base32"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/bdlm/log"
|
||||
"github.com/o3ma/o3"
|
||||
|
@ -32,6 +34,18 @@ func (a *Account) sending(to string, msg stanza.Message) (o3.Message, error) {
|
|||
Recipient: o3.NewIDString(to),
|
||||
PubNick: a.ThreemaID.Nick,
|
||||
}
|
||||
var groupHeader *o3.GroupMessageHeader
|
||||
if msg.Type == stanza.MessageTypeGroupchat {
|
||||
toA := strings.SplitN(to, "-", 2)
|
||||
gid, err := base32.StdEncoding.DecodeString(toA[1])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
groupHeader = &o3.GroupMessageHeader{
|
||||
CreatorID: o3.NewIDString(toA[0]),
|
||||
}
|
||||
copy(groupHeader.GroupID[:], gid)
|
||||
}
|
||||
chatState := false
|
||||
chatStateComposing := false
|
||||
|
||||
|
@ -102,12 +116,21 @@ func (a *Account) sending(to string, msg stanza.Message) (o3.Message, error) {
|
|||
MessageHeader: header,
|
||||
Body: msg.Body,
|
||||
}
|
||||
a.deliveredMSG[msg3ID] = msg.Id
|
||||
a.readedMSG[msg3ID] = msg.Id
|
||||
logger.WithFields(map[string]interface{}{
|
||||
logger = logger.WithFields(map[string]interface{}{
|
||||
"x_id": msg.Id,
|
||||
"t_id": msg3ID,
|
||||
"text": msg.Body,
|
||||
}).Debug("send text")
|
||||
})
|
||||
if groupHeader != nil {
|
||||
logger.Debug("send grouptext")
|
||||
// TODO iterate of all occupants
|
||||
return &o3.GroupTextMessage{
|
||||
GroupMessageHeader: groupHeader,
|
||||
TextMessage: msg3,
|
||||
}, nil
|
||||
}
|
||||
a.deliveredMSG[msg3ID] = msg.Id
|
||||
a.readedMSG[msg3ID] = msg.Id
|
||||
logger.Debug("send text")
|
||||
return msg3, nil
|
||||
}
|
||||
|
|
Reference in New Issue