func (h Helper) CTCPln(target, tag string, data ...interface{}) error {
	str := fmt.Sprintln(data...)
	str = str[:len(str)-1]
	msg := CTCPpack([]byte(tag), []byte(str))
	_, err := fmt.Fprintf(h, fmtCTCP, target, msg)
	return err
}
CTCPln sends a CTCP with spaces between everything.
Does not send newline.
package irc
import (
	"fmt"
	"io"
	"strings"
)
const (
	IRC_MAX_LENGTH = 510 - 62
	SPLIT_BACKWARD = 20
	fmtPrivmsgHeader = PRIVMSG + " %s :"
	fmtNoticeHeader = NOTICE + " %s :"
	fmtCTCP = PRIVMSG + " %s :%s"
	fmtCTCPReply = NOTICE + " %s :%s"
	fmtNotifyHeader = "%s %s :"
	fmtJoin = JOIN + " :%s"
	fmtPart = PART + " :%s"
	fmtQuit = QUIT + " :%s"
)
type Writer interface {
	io.Writer
	Send(...interface{}) error
	Sendln(...interface{}) error
	Sendf(string, ...interface{}) error
	Privmsg(string, ...interface{}) error
	Privmsgln(string, ...interface{}) error
	Privmsgf(string, string, ...interface{}) error
	Notice(string, ...interface{}) error
	Noticeln(string, ...interface{}) error
	Noticef(string, string, ...interface{}) error
	CTCP(string, string, ...interface{}) error
	CTCPln(string, string, ...interface{}) error
	CTCPf(string, string, string, ...interface{}) error
	CTCPReply(string, string, ...interface{}) error
	CTCPReplyln(string, string, ...interface{}) error
	CTCPReplyf(string, string, string, ...interface{}) error
	Notify(*Event, string, ...interface{}) error
	Notifyln(*Event, string, ...interface{}) error
	Notifyf(*Event, string, string, ...interface{}) error
	Join(...string) error
	Part(...string) error
	Quit(string) error
}
type Helper struct {
	io.Writer
}
func (h Helper) Send(args ...interface{}) error {
	_, err := fmt.Fprint(h, args...)
	return err
}
func (h Helper) Sendln(args ...interface{}) error {
	str := fmt.Sprintln(args...)
	_, err := h.Write([]byte(str[:len(str)-1]))
	return err
}
func (h Helper) Sendf(format string, args ...interface{}) error {
	_, err := fmt.Fprintf(h, format, args...)
	return err
}
func (h Helper) Privmsg(target string, args ...interface{}) error {
	header := []byte(fmt.Sprintf(fmtPrivmsgHeader, target))
	msg := []byte(fmt.Sprint(args...))
	return h.splitSend(header, msg)
}
func (h Helper) Privmsgln(target string, args ...interface{}) error {
	header := []byte(fmt.Sprintf(fmtPrivmsgHeader, target))
	str := fmt.Sprintln(args...)
	str = str[:len(str)-1]
	return h.splitSend(header, []byte(str))
}
func (h Helper) Privmsgf(target, format string, args ...interface{}) error {
	header := []byte(fmt.Sprintf(fmtPrivmsgHeader, target))
	msg := []byte(fmt.Sprintf(format, args...))
	return h.splitSend(header, msg)
}
func (h Helper) Notice(target string, args ...interface{}) error {
	header := []byte(fmt.Sprintf(fmtNoticeHeader, target))
	msg := []byte(fmt.Sprint(args...))
	return h.splitSend(header, msg)
}
func (h Helper) Noticeln(target string, args ...interface{}) error {
	header := []byte(fmt.Sprintf(fmtNoticeHeader, target))
	str := fmt.Sprintln(args...)
	str = str[:len(str)-1]
	return h.splitSend(header, []byte(str))
}
func (h Helper) Noticef(target, format string, args ...interface{}) error {
	header := []byte(fmt.Sprintf(fmtNoticeHeader, target))
	msg := []byte(fmt.Sprintf(format, args...))
	return h.splitSend(header, msg)
}
func (h Helper) CTCP(target, tag string, data ...interface{}) error {
	msg := CTCPpack([]byte(tag), []byte(fmt.Sprint(data...)))
	_, err := fmt.Fprintf(h, fmtCTCP, target, msg)
	return err
}