Started support for IRC LINKS command
This commit is contained in:
		
							parent
							
								
									e31fe5d24d
								
							
						
					
					
						commit
						d2d50c849b
					
				
							
								
								
									
										24
									
								
								commands.go
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								commands.go
									
									
									
									
									
								
							@ -2,6 +2,7 @@ package irc
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"regexp"
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"time"
 | 
			
		||||
@ -948,3 +949,26 @@ func VersionHandler(message *irc.Message, client *Client) {
 | 
			
		||||
	m := irc.Message{Prefix: client.Server.Prefix, Command: irc.RPL_VERSION, Params: []string{client.Nickname, p}}
 | 
			
		||||
	client.Encode(&m)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// LinksHandler is a specialized CommandHandler to respond to channel IRC LINKS commands from a client
 | 
			
		||||
// Implemented according to RFC 1459 Section 4.3.3 and RFC 2812 Section 3.4.5
 | 
			
		||||
func LinksHandler(message *irc.Message, client *Client) {
 | 
			
		||||
	if len(message.Params) == 2 {
 | 
			
		||||
		m := irc.Message{Prefix: client.Server.Prefix, Command: irc.ERR_NOSUCHSERVER, Params: []string{client.Nickname, message.Params[0]}, Trailing: "No such server"}
 | 
			
		||||
		client.Encode(&m)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	mask := "*"
 | 
			
		||||
	if len(message.Params) != 0 {
 | 
			
		||||
		mask = message.Params[0]
 | 
			
		||||
	}
 | 
			
		||||
	regMask := strings.Replace(mask, "*", ".*", -1)
 | 
			
		||||
	ok, err := regexp.MatchString(regMask, client.Server.Config.Name)
 | 
			
		||||
	if ok && err == nil {
 | 
			
		||||
		m := irc.Message{Prefix: client.Server.Prefix, Command: irc.RPL_LINKS, Params: []string{client.Nickname, mask, client.Server.Config.Name}, Trailing: "0"}
 | 
			
		||||
		client.Encode(&m)
 | 
			
		||||
	}
 | 
			
		||||
	m := irc.Message{Prefix: client.Server.Prefix, Command: irc.RPL_ENDOFLINKS, Params: []string{client.Nickname, mask}, Trailing: "End of LINKS list"}
 | 
			
		||||
	client.Encode(&m)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user