feat: domain blocker plugin
This commit is contained in:
parent
c9edb57505
commit
7dd02c0056
25 changed files with 898 additions and 63 deletions
|
@ -167,6 +167,12 @@ func (s *SlackPlatform) SendMessage(msg *model.Message) error {
|
|||
return errors.New("bot token not configured")
|
||||
}
|
||||
|
||||
// Check for delete message action
|
||||
if msg.Raw != nil && msg.Raw["action"] == "delete" {
|
||||
// This is a request to delete a message
|
||||
return s.deleteMessage(msg)
|
||||
}
|
||||
|
||||
// Prepare payload
|
||||
payload := map[string]interface{}{
|
||||
"channel": msg.Chat,
|
||||
|
@ -212,6 +218,63 @@ func (s *SlackPlatform) SendMessage(msg *model.Message) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// DeleteMessage deletes a message on Slack
|
||||
func (s *SlackPlatform) DeleteMessage(channel string, messageID string) error {
|
||||
// Prepare payload for chat.delete API
|
||||
payload := map[string]interface{}{
|
||||
"channel": channel,
|
||||
"ts": messageID, // In Slack, the ts (timestamp) is the message ID
|
||||
}
|
||||
|
||||
// Convert payload to JSON
|
||||
data, err := json.Marshal(payload)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Send HTTP request to chat.delete endpoint
|
||||
req, err := http.NewRequest("POST", "https://slack.com/api/chat.delete", strings.NewReader(string(data)))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", s.config.BotOAuthAccessToken))
|
||||
|
||||
client := &http.Client{}
|
||||
resp, err := client.Do(req)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer func() {
|
||||
if err := resp.Body.Close(); err != nil {
|
||||
fmt.Printf("Error closing response body: %v\n", err)
|
||||
}
|
||||
}()
|
||||
|
||||
// Check response
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
respBody, _ := io.ReadAll(resp.Body)
|
||||
return fmt.Errorf("slack API error: %d - %s", resp.StatusCode, string(respBody))
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// deleteMessage is a legacy method that uses the Raw message approach
|
||||
func (s *SlackPlatform) deleteMessage(msg *model.Message) error {
|
||||
// Get message ID to delete
|
||||
messageID, ok := msg.Raw["message_id"]
|
||||
if !ok {
|
||||
return fmt.Errorf("no message ID provided for deletion")
|
||||
}
|
||||
|
||||
// Convert to string if needed
|
||||
messageIDStr := fmt.Sprintf("%v", messageID)
|
||||
|
||||
return s.DeleteMessage(msg.Chat, messageIDStr)
|
||||
}
|
||||
|
||||
// Helper function to parse int64
|
||||
func parseInt64(s string) (int64, error) {
|
||||
var n int64
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue