update command "create"
This commit is contained in:
parent
b2471e801f
commit
c4ed489406
109
commands.go
109
commands.go
|
@ -1,6 +1,7 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
skype "github.com/kelaresg/go-skypeapi"
|
skype "github.com/kelaresg/go-skypeapi"
|
||||||
"github.com/kelaresg/matrix-skype/database"
|
"github.com/kelaresg/matrix-skype/database"
|
||||||
|
@ -38,6 +39,7 @@ func NewCommandHandler(bridge *Bridge) *CommandHandler {
|
||||||
type CommandEvent struct {
|
type CommandEvent struct {
|
||||||
Bot *appservice.IntentAPI
|
Bot *appservice.IntentAPI
|
||||||
Bridge *Bridge
|
Bridge *Bridge
|
||||||
|
Portal *Portal
|
||||||
Handler *CommandHandler
|
Handler *CommandHandler
|
||||||
RoomID id.RoomID
|
RoomID id.RoomID
|
||||||
User *User
|
User *User
|
||||||
|
@ -142,7 +144,7 @@ func (handler *CommandHandler) CommandMux(ce *CommandEvent) {
|
||||||
handler.CommandCreate(ce)
|
handler.CommandCreate(ce)
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
ce.Reply("Unknown Command")
|
handler.CommandSpecialMux(ce)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1151,50 +1153,105 @@ func (handler *CommandHandler) CommandJoin(ce *CommandEvent) {
|
||||||
// }
|
// }
|
||||||
//}
|
//}
|
||||||
|
|
||||||
const cmdCreateHelp = `create <_topic_> <_member user id_>,... - Create a group.`
|
const cmdCreateHelp = `create - Create a group chat.`
|
||||||
|
|
||||||
func (handler *CommandHandler) CommandCreate(ce *CommandEvent) {
|
func (handler *CommandHandler) CommandCreate(ce *CommandEvent) {
|
||||||
if len(ce.Args) < 2 {
|
if ce.Portal != nil {
|
||||||
ce.Reply("**Usage:** `create <topic> <member user id>,...`")
|
ce.Reply("This is already a portal room")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
user := ce.User
|
members, err := ce.Bot.JoinedMembers(ce.RoomID)
|
||||||
topic := ce.Args[0]
|
if err != nil {
|
||||||
members := skype.Members{}
|
ce.Reply("Failed to get room members: %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// The user who created the group must be in the members and have "Admin" rights
|
var roomNameEvent event.RoomNameEventContent
|
||||||
userId := ce.User.Conn.UserProfile.Username
|
err = ce.Bot.StateEvent(ce.RoomID, event.StateRoomName, "", &roomNameEvent)
|
||||||
|
if err != nil && !errors.Is(err, mautrix.MNotFound) {
|
||||||
|
ce.Reply("Failed to get room name")
|
||||||
|
return
|
||||||
|
} else if len(roomNameEvent.Name) == 0 {
|
||||||
|
ce.Reply("Please set a name for the room first")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var encryptionEvent event.EncryptionEventContent
|
||||||
|
err = ce.Bot.StateEvent(ce.RoomID, event.StateEncryption, "", &encryptionEvent)
|
||||||
|
if err != nil && !errors.Is(err, mautrix.MNotFound) {
|
||||||
|
ce.Reply("Failed to get room encryption status")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var participants []string
|
||||||
|
for userID := range members.Joined {
|
||||||
|
jid, ok := handler.bridge.ParsePuppetMXID(userID)
|
||||||
|
if ok && jid != ce.User.JID {
|
||||||
|
participants = append(participants, jid)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
selfMembers := skype.Members{}
|
||||||
member2 := skype.Member{
|
member2 := skype.Member{
|
||||||
Id: "8:" + userId,
|
Id: strings.Replace(ce.User.JID, skypeExt.NewUserSuffix,"", 1),
|
||||||
Role: "Admin",
|
Role: "Admin",
|
||||||
}
|
}
|
||||||
|
|
||||||
members.Members = append(members.Members, member2)
|
selfMembers.Members = append(selfMembers.Members, member2)
|
||||||
members.Properties = skype.Properties{
|
selfMembers.Properties = skype.Properties{
|
||||||
HistoryDisclosed: "true",
|
HistoryDisclosed: "true",
|
||||||
Topic: topic,
|
Topic: roomNameEvent.Name,
|
||||||
|
}
|
||||||
|
handler.log.Debugln("Create Group", roomNameEvent.Name, "with", selfMembers)
|
||||||
|
err = ce.User.Conn.HandleGroupCreate(selfMembers)
|
||||||
|
if err != nil {
|
||||||
|
ce.Reply("Failed to create group: %v", err)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
handler.log.Debugln("Create Group", topic, "with", members)
|
participantMembers := skype.Members{}
|
||||||
err := user.Conn.HandleGroupCreate(members)
|
for _, participant := range participants {
|
||||||
inputArr := strings.Split(ce.Args[1], ",")
|
participantArr := strings.Split(participant, "@")
|
||||||
members = skype.Members{}
|
memberId := id.Dec(participantArr[0])
|
||||||
for _, memberId := range inputArr {
|
cond1 := "8-live-"
|
||||||
members.Members = append(members.Members, skype.Member{
|
cond2 := "8-"
|
||||||
|
if strings.HasPrefix(memberId, cond1) {
|
||||||
|
memberId = strings.Replace(memberId, cond1, "8:live:", 1)
|
||||||
|
} else if strings.HasPrefix(memberId, cond2){
|
||||||
|
memberId = strings.Replace(memberId, cond2, "8:", 1)
|
||||||
|
}
|
||||||
|
participantMembers.Members = append(participantMembers.Members, skype.Member{
|
||||||
Id: memberId,
|
Id: memberId,
|
||||||
Role: "Admin",
|
Role: "Admin",
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
conversationId, ok := <-user.Conn.CreateChan
|
conversationId, ok := <-ce.User.Conn.CreateChan
|
||||||
if ok {
|
if ok {
|
||||||
err = user.Conn.AddMember(members, conversationId)
|
portal := handler.bridge.GetPortalByJID(database.GroupPortalKey(conversationId))
|
||||||
|
portal.roomCreateLock.Lock()
|
||||||
|
defer portal.roomCreateLock.Unlock()
|
||||||
|
if len(portal.MXID) != 0 {
|
||||||
|
portal.log.Warnln("Detected race condition in room creation")
|
||||||
|
// TODO race condition, clean up the old room
|
||||||
}
|
}
|
||||||
|
portal.MXID = ce.RoomID
|
||||||
|
portal.Name = roomNameEvent.Name
|
||||||
|
portal.Encrypted = encryptionEvent.Algorithm == id.AlgorithmMegolmV1
|
||||||
|
if !portal.Encrypted && handler.bridge.Config.Bridge.Encryption.Default {
|
||||||
|
_, err = portal.MainIntent().SendStateEvent(portal.MXID, event.StateEncryption, "", &event.EncryptionEventContent{Algorithm: id.AlgorithmMegolmV1})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ce.Reply("Please confirm that parameters is correct.")
|
portal.log.Warnln("Failed to enable e2be:", err)
|
||||||
} else {
|
|
||||||
ce.Reply("Syncing group list...")
|
|
||||||
time.Sleep(time.Duration(3) * time.Second)
|
|
||||||
ce.Reply("Syncing group list completed")
|
|
||||||
}
|
}
|
||||||
|
portal.Encrypted = true
|
||||||
|
}
|
||||||
|
|
||||||
|
portal.Update()
|
||||||
|
portal.UpdateBridgeInfo()
|
||||||
|
|
||||||
|
err = ce.User.Conn.AddMember(participantMembers, conversationId)
|
||||||
|
ce.Reply("Successfully created Skype group %s", portal.Key.JID)
|
||||||
|
}
|
||||||
|
|
||||||
|
//ce.User.addPortalToCommunity(portal)
|
||||||
}
|
}
|
||||||
|
|
|
@ -226,7 +226,7 @@ func (mx *MatrixHandler) HandlePuppetInvite(evt *event.Event, inviter *User, pup
|
||||||
_, _ = intent.SendNotice(evt.RoomID, "Please invite the bridge bot first if you want to bridge to a WhatsApp group.")
|
_, _ = intent.SendNotice(evt.RoomID, "Please invite the bridge bot first if you want to bridge to a WhatsApp group.")
|
||||||
_, _ = intent.LeaveRoom(evt.RoomID)
|
_, _ = intent.LeaveRoom(evt.RoomID)
|
||||||
} else {
|
} else {
|
||||||
_, _ = intent.SendNotice(evt.RoomID, "This puppet will remain inactive until this room is bridged to a WhatsApp group.")
|
_, _ = intent.SendNotice(evt.RoomID, "This puppet will remain inactive until this room is bridged to a Skype group.")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue