mirror of
				https://github.com/woodpecker-ci/woodpecker.git
				synced 2025-10-31 20:35:31 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			64 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package irc
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 
 | |
| 	"github.com/drone/drone/shared/model"
 | |
| 	"github.com/thoj/go-ircevent"
 | |
| )
 | |
| 
 | |
| const (
 | |
| 	MessageStarted = "Building: %s, commit %s, author %s"
 | |
| 	MessageSuccess = "Success: %s, commit %s, author %s"
 | |
| 	MessageFailure = "Failed: %s, commit %s, author %s"
 | |
| )
 | |
| 
 | |
| type IRC struct {
 | |
| 	Channel string
 | |
| 	Nick    string
 | |
| 	Server  string
 | |
| 	Started *bool `yaml:"on_started,omitempty"`
 | |
| 	Success *bool `yaml:"on_success,omitempty"`
 | |
| 	Failure *bool `yaml:"on_failure,omitempty"`
 | |
| }
 | |
| 
 | |
| func (i *IRC) Send(req *model.Request) error {
 | |
| 	switch {
 | |
| 	case req.Commit.Status == model.StatusStarted && i.Started != nil && *i.Started == true:
 | |
| 		return i.sendStarted(req)
 | |
| 	case req.Commit.Status == model.StatusSuccess && i.Success != nil && *i.Success == true:
 | |
| 		return i.sendSuccess(req)
 | |
| 	case req.Commit.Status == model.StatusFailure && i.Failure != nil && *i.Failure == true:
 | |
| 		return i.sendFailure(req)
 | |
| 	}
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| func (i *IRC) sendStarted(req *model.Request) error {
 | |
| 	msg := fmt.Sprintf(MessageStarted, req.Repo.Name, req.Commit.ShaShort(), req.Commit.Author)
 | |
| 	return i.send(i.Channel, msg)
 | |
| }
 | |
| 
 | |
| func (i *IRC) sendFailure(req *model.Request) error {
 | |
| 	msg := fmt.Sprintf(MessageFailure, req.Repo.Name, req.Commit.ShaShort(), req.Commit.Author)
 | |
| 	return i.send(i.Channel, msg)
 | |
| }
 | |
| 
 | |
| func (i *IRC) sendSuccess(req *model.Request) error {
 | |
| 	msg := fmt.Sprintf(MessageSuccess, req.Repo.Name, req.Commit.ShaShort(), req.Commit.Author)
 | |
| 	return i.send(i.Channel, msg)
 | |
| }
 | |
| 
 | |
| // send is a helper function that will send notice messages
 | |
| // to the connected IRC client
 | |
| func (i *IRC) send(channel string, message string) error {
 | |
| 	client := irc.IRC(i.Nick, i.Nick)
 | |
| 	if client != nil {
 | |
| 		return fmt.Errorf("Error creating IRC client")
 | |
| 	}
 | |
| 	defer client.Disconnect()
 | |
| 	client.Connect(i.Server)
 | |
| 	client.Notice(channel, message)
 | |
| 	return nil
 | |
| }
 |