feat: domain blocker plugin
Some checks failed
ci/woodpecker/tag/release Pipeline was successful
ci/woodpecker/push/ci Pipeline failed

This commit is contained in:
Felipe M 2025-04-22 18:09:27 +02:00
parent c9edb57505
commit 7dd02c0056
Signed by: fmartingr
GPG key ID: CCFBC5637D4000A8
25 changed files with 898 additions and 63 deletions

View file

@ -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)
}