whatsapp-multi-devicewhatsapp-apiwhatsapprestgolanggorest-apigolang-whatsapp-apigolang-whatsappbotwhatsapp-web-multi-devicewhatsapp-api-go
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
2.5 KiB
98 lines
2.5 KiB
package utils
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
|
|
"github.com/aldinokemal/go-whatsapp-web-multidevice/config"
|
|
"github.com/gofiber/fiber/v2/log"
|
|
)
|
|
|
|
type RecordedMessage struct {
|
|
MessageID string `json:"message_id,omitempty"`
|
|
JID string `json:"jid,omitempty"`
|
|
MessageContent string `json:"message_content,omitempty"`
|
|
}
|
|
|
|
func FindRecordFromStorage(messageID string) (RecordedMessage, error) {
|
|
data, err := os.ReadFile(config.PathChatStorage)
|
|
if err != nil {
|
|
return RecordedMessage{}, err
|
|
}
|
|
|
|
lines := strings.Split(string(data), "\n")
|
|
for _, line := range lines {
|
|
if line == "" {
|
|
continue
|
|
}
|
|
parts := strings.Split(line, ",")
|
|
if len(parts) == 3 && parts[0] == messageID {
|
|
return RecordedMessage{
|
|
MessageID: parts[0],
|
|
JID: parts[1],
|
|
MessageContent: parts[2],
|
|
}, nil
|
|
}
|
|
}
|
|
return RecordedMessage{}, fmt.Errorf("message ID %s not found in storage", messageID)
|
|
}
|
|
|
|
func RecordMessage(messageID string, senderJID string, messageContent string) {
|
|
message := RecordedMessage{
|
|
MessageID: messageID,
|
|
JID: senderJID,
|
|
MessageContent: messageContent,
|
|
}
|
|
|
|
// Read existing messages
|
|
var messages []RecordedMessage
|
|
if data, err := os.ReadFile(config.PathChatStorage); err == nil {
|
|
// Split file by newlines and parse each line
|
|
lines := strings.Split(string(data), "\n")
|
|
for _, line := range lines {
|
|
if line == "" {
|
|
continue
|
|
}
|
|
parts := strings.Split(line, ",")
|
|
|
|
msg := RecordedMessage{
|
|
MessageID: parts[0],
|
|
JID: parts[1],
|
|
MessageContent: parts[2],
|
|
}
|
|
messages = append(messages, msg)
|
|
}
|
|
}
|
|
|
|
// Check for duplicates
|
|
for _, msg := range messages {
|
|
if msg.MessageID == message.MessageID {
|
|
return // Skip if duplicate found
|
|
}
|
|
}
|
|
|
|
// Write new message at the top
|
|
f, err := os.OpenFile(config.PathChatStorage, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0644)
|
|
if err != nil {
|
|
log.Errorf("Failed to open received-chat.txt: %v", err)
|
|
return
|
|
}
|
|
defer f.Close()
|
|
|
|
// Write new message first
|
|
csvLine := fmt.Sprintf("%s,%s,%s\n", message.MessageID, message.JID, message.MessageContent)
|
|
if _, err := f.WriteString(csvLine); err != nil {
|
|
log.Errorf("Failed to write to received-chat.txt: %v", err)
|
|
return
|
|
}
|
|
|
|
// Write existing messages after
|
|
for _, msg := range messages {
|
|
csvLine := fmt.Sprintf("%s,%s,%s\n", msg.MessageID, msg.JID, msg.MessageContent)
|
|
if _, err := f.WriteString(csvLine); err != nil {
|
|
log.Errorf("Failed to write to received-chat.txt: %v", err)
|
|
return
|
|
}
|
|
}
|
|
}
|