feat: domain blocker plugin
This commit is contained in:
parent
c9edb57505
commit
7dd02c0056
25 changed files with 898 additions and 63 deletions
|
@ -217,6 +217,13 @@ func (t *TelegramPlatform) ParseChannelFromMessage(body []byte) (map[string]any,
|
|||
|
||||
// SendMessage sends a message to Telegram
|
||||
func (t *TelegramPlatform) SendMessage(msg *model.Message) error {
|
||||
// Check for delete message action (legacy method)
|
||||
if msg.Raw != nil && msg.Raw["action"] == "delete" {
|
||||
// This is a request to delete a message using the legacy method
|
||||
return t.deleteMessage(msg)
|
||||
}
|
||||
|
||||
// Regular message sending
|
||||
// Convert chat ID to int64
|
||||
chatID, err := strconv.ParseInt(msg.Chat, 10, 64)
|
||||
if err != nil {
|
||||
|
@ -276,3 +283,88 @@ func (t *TelegramPlatform) SendMessage(msg *model.Message) error {
|
|||
t.log.Debug("Message sent successfully")
|
||||
return nil
|
||||
}
|
||||
|
||||
// DeleteMessage deletes a message on Telegram
|
||||
func (t *TelegramPlatform) DeleteMessage(channel string, messageID string) error {
|
||||
// Convert chat ID to int64
|
||||
chatID, err := strconv.ParseInt(channel, 10, 64)
|
||||
if err != nil {
|
||||
t.log.Error("Invalid chat ID for message deletion", "chat_id", channel, "error", err)
|
||||
return err
|
||||
}
|
||||
|
||||
// Convert message ID to integer
|
||||
msgID, err := strconv.Atoi(messageID)
|
||||
if err != nil {
|
||||
t.log.Error("Invalid message ID for deletion", "message_id", messageID, "error", err)
|
||||
return err
|
||||
}
|
||||
|
||||
// Prepare payload for deleteMessage API
|
||||
payload := map[string]interface{}{
|
||||
"chat_id": chatID,
|
||||
"message_id": msgID,
|
||||
}
|
||||
|
||||
t.log.Debug("Deleting message on Telegram", "chat_id", chatID, "message_id", msgID)
|
||||
|
||||
// Convert payload to JSON
|
||||
data, err := json.Marshal(payload)
|
||||
if err != nil {
|
||||
t.log.Error("Failed to marshal delete message payload", "error", err)
|
||||
return err
|
||||
}
|
||||
|
||||
// Send HTTP request to deleteMessage endpoint
|
||||
resp, err := http.Post(
|
||||
t.apiURL+"/deleteMessage",
|
||||
"application/json",
|
||||
bytes.NewBuffer(data),
|
||||
)
|
||||
if err != nil {
|
||||
t.log.Error("Failed to delete message", "error", err)
|
||||
return err
|
||||
}
|
||||
defer func() {
|
||||
if err := resp.Body.Close(); err != nil {
|
||||
t.log.Error("Error closing response body", "error", err)
|
||||
}
|
||||
}()
|
||||
|
||||
// Check response
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
bodyBytes, _ := io.ReadAll(resp.Body)
|
||||
errMsg := string(bodyBytes)
|
||||
t.log.Error("Telegram API error when deleting message", "status", resp.StatusCode, "response", errMsg)
|
||||
return fmt.Errorf("telegram API error when deleting message: %d - %s", resp.StatusCode, errMsg)
|
||||
}
|
||||
|
||||
t.log.Debug("Message deleted successfully")
|
||||
return nil
|
||||
}
|
||||
|
||||
// deleteMessage is a legacy method that uses the Raw message approach
|
||||
func (t *TelegramPlatform) deleteMessage(msg *model.Message) error {
|
||||
// Get message ID to delete
|
||||
messageIDInterface, ok := msg.Raw["message_id"]
|
||||
if !ok {
|
||||
t.log.Error("No message ID provided for deletion")
|
||||
return fmt.Errorf("no message ID provided for deletion")
|
||||
}
|
||||
|
||||
// Convert message ID to string
|
||||
var messageIDStr string
|
||||
switch v := messageIDInterface.(type) {
|
||||
case string:
|
||||
messageIDStr = v
|
||||
case int:
|
||||
messageIDStr = strconv.Itoa(v)
|
||||
case float64:
|
||||
messageIDStr = strconv.Itoa(int(v))
|
||||
default:
|
||||
t.log.Error("Invalid message ID type for deletion", "type", fmt.Sprintf("%T", messageIDInterface))
|
||||
return fmt.Errorf("invalid message ID type for deletion")
|
||||
}
|
||||
|
||||
return t.DeleteMessage(msg.Chat, messageIDStr)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue