本文整理汇总了Golang中github.com/jteeuwen/ircb/proto.Client类的典型用法代码示例。如果您正苦于以下问题:Golang Client类的具体用法?Golang Client怎么用?Golang Client使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Client类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: fetchTitle
// fetchTitle attempts to retrieve the title element for a given url.
func fetchTitle(c *proto.Client, m *proto.Message, url string) {
resp, err := http.Get(url)
if err != nil {
return
}
body, err := ioutil.ReadAll(resp.Body)
resp.Body.Close()
if err != nil {
return
}
body = bytes.ToLower(body)
s := bytes.Index(body, []byte("<title>"))
if s == -1 {
return
}
body = body[s+7:]
e := bytes.Index(body, []byte("</title>"))
if e == -1 {
e = len(body) - 1
}
body = bytes.TrimSpace(body[:e])
c.PrivMsg(m.Receiver, "%s's link shows: %s",
m.SenderName, html.UnescapeString(string(body)))
}
示例2: Load
// Init initializes the plugin. it loads configuration data and binds
// commands and protocol handlers.
func (p *Plugin) Load(c *proto.Client) (err error) {
err = p.Base.Load(c)
if err != nil {
return
}
c.Bind(proto.CmdPrivMsg, func(c *proto.Client, m *proto.Message) {
p.parseURL(c, m)
})
ini := p.LoadConfig()
if ini == nil {
return
}
s := ini.Section("exclude")
list := s.List("url")
p.exclude = make([]*regexp.Regexp, len(list))
for i := range list {
p.exclude[i], err = regexp.Compile(list[i])
if err != nil {
return
}
}
return
}
示例3: ctcpVersion
// ctcpVersion handles a CTCP version request.
func ctcpVersion(c *proto.Client, m *proto.Message) bool {
if m.Data != "\x01VERSION\x01" {
return false
}
c.PrivMsg(m.SenderName, "%s %d.%d", AppName, AppVersionMajor, AppVersionMinor)
return true
}
示例4: ctcpPing
// ctcpPing handles a CTCP ping request.
func ctcpPing(c *proto.Client, m *proto.Message) bool {
if !strings.HasPrefix(m.Data, "\x01PING ") {
return false
}
c.PrivMsg(m.SenderName, "\x01PONG %s\x01", m.Data[6:])
return true
}
示例5: bind
// bind binds protocol message handlers.
func bind(c *proto.Client) {
c.Bind(proto.Unknown, onAny)
c.Bind(proto.CmdPing, onPing)
c.Bind(proto.EndOfMOTD, onJoinChannels)
c.Bind(proto.ErrNoMOTD, onJoinChannels)
c.Bind(proto.ErrNicknameInUse, onNickInUse)
c.Bind(proto.CmdPrivMsg, onPrivMsg)
}
示例6: shutdown
// shutdown cleans up our mess.
func shutdown(conn *net.Conn, client *proto.Client) {
plugin.Unload(client)
log.Printf("Shutting down.")
client.Quit(config.QuitMessage)
client.Close()
conn.Close()
}
示例7: onNickInUse
// onNickInUse is called whenever we receive a notification that our
// nickname is already in use. We will attempt to re-acquire it by
// identifying with our password. Otherwise we will pick a new name.
func onNickInUse(c *proto.Client, m *proto.Message) {
if len(config.NickservPassword) > 0 {
c.Recover(config.Nickname, config.NickservPassword)
return
}
config.SetNickname(config.Nickname + "_")
c.Nick(config.Nickname, "")
}
示例8: fetchTweet
// fetchTweet attempts to retrieve the tweet associated with a given url.
func fetchTweet(c *proto.Client, m *proto.Message, url string) {
id, err := strconv.ParseInt(twitterUrlRegex.FindStringSubmatch(url)[2], 10, 64)
if err != nil {
c.PrivMsg(m.Receiver, "error parsing tweet :(")
log.Print("error parsing tweet for %s: %v", url, err)
fetchTitle(c, m, url)
return
}
tweet, err := api.GetTweet(id, nil)
if err != nil {
log.Print("error parsing tweet for %s: %v", url, err)
fetchTitle(c, m, url)
return
}
c.PrivMsg(m.Receiver, "%s's tweet shows: %s",
m.SenderName, html.UnescapeString(tweet.Text))
}
示例9: Load
func (p *Plugin) Load(c *proto.Client) (err error) {
err = p.Base.Load(c)
if err != nil {
return
}
w := new(cmd.Command)
w.Name = "define"
w.Description = "Fetch the definition for the given term"
w.Restricted = false
w.Params = []cmd.Param{
{Name: "term", Description: "Word to find definition for", Pattern: cmd.RegAny},
}
w.Execute = func(cmd *cmd.Command, c *proto.Client, m *proto.Message) {
dict, err := Dial("tcp", "dict.org:2628")
if err != nil {
log.Printf("[dict] %s", err)
c.PrivMsg(m.Receiver, "%s, No definition found for '%s'",
m.SenderName, cmd.Params[0].Value)
return
}
def, err := dict.Define("wn", cmd.Params[0].Value)
if err != nil {
log.Printf("[dict] %s", err)
c.PrivMsg(m.Receiver, "%s, No definition found for '%s'",
m.SenderName, cmd.Params[0].Value)
return
}
if len(def) == 0 {
c.PrivMsg(m.Receiver, "%s, No definition found for '%s'",
m.SenderName, cmd.Params[0].Value)
return
}
space := []byte{' '}
mspace := []byte{' ', ' '}
line := bytes.Replace(def[0].Text, []byte{'\n'}, space, -1)
// Strip all multi-space indents.
for bytes.Index(line, mspace) > -1 {
line = bytes.Replace(line, mspace, space, -1)
}
c.PrivMsg(m.Receiver, "%s: %s", m.SenderName, line)
}
cmd.Register(w)
return
}
示例10: Parse
// Parse reads incoming message data and tries to parse it into
// a command structure and then execute it.
func Parse(prefix string, c *proto.Client, m *proto.Message) bool {
prefixlen := len(prefix)
if prefixlen == 0 || !strings.HasPrefix(m.Data, prefix) {
return false
}
// Split the data into a name and list of parameters.
name, params := parseCommand(m.Data[prefixlen:])
if len(name) == 0 {
return false
}
// Ensure the given command exists.
new, ok := commands[name]
if !ok {
c.PrivMsg(m.SenderName, "Unknown command %q", name)
return false
}
// Create a new command instance.
cmd := new()
pc := cmd.RequiredParamCount()
lp := len(params)
// Make sure we received enough parameters.
if pc > lp {
c.PrivMsg(m.SenderName, "Missing parameters for command %q", name)
return false
}
// Copy over parameter values and ensure they are of the right format.
for i := 0; i < pc && i < lp; i++ {
cmd.Params[i].Value = params[i]
if !cmd.Params[i].Valid() {
c.PrivMsg(m.SenderName, "Invalid parameter value %q for command %q",
params[i], name)
return false
}
}
// Execute the command.
if cmd.Execute == nil {
c.PrivMsg(m.SenderName, "Command %q is not implemented", name)
return false
}
go cmd.Execute(cmd, c, m)
return true
}
示例11: Init
// Init initializes the plugin. it loads configuration data and binds
// commands and protocol handlers.
func Init(profile string, c *proto.Client) {
log.Println("Initializing: url")
ini := ini.New()
err := ini.Load(plugin.ConfigPath(profile, "url"))
if err != nil {
log.Fatal(err)
}
s := ini.Section("exclude")
list := s.List("url")
exclude = make([]*regexp.Regexp, len(list))
for i := range list {
exclude[i], err = regexp.Compile(list[i])
if err != nil {
log.Fatalf("- Invalid pattern: %s", list[i])
}
}
c.Bind(proto.CmdPrivMsg, parseURL)
}
示例12: Parse
// Parse reads incoming message data and tries to parse it into
// a command structure and then execute it.
func Parse(prefix string, c *proto.Client, m *proto.Message) bool {
prefixlen := len(prefix)
if prefixlen == 0 || !strings.HasPrefix(m.Data, prefix) {
return false
}
// Split the data into a name and list of parameters.
name, params := parseCommand(m.Data[prefixlen:])
if len(name) == 0 {
return false
}
// Ensure the given command exists.
cmd := findCommand(name)
if cmd == nil {
return false
}
cmd.Data = strings.TrimSpace(m.Data[prefixlen+len(name):])
// Ensure the current user us allowed to execute the command.
if cmd.Restricted && !isWhitelisted(m.SenderMask) {
c.PrivMsg(m.SenderName, "Access to %q denied.", name)
return false
}
// Make sure we received enough parameters.
pc := cmd.RequiredParamCount()
lp := len(params)
if pc > lp {
c.PrivMsg(m.SenderName, "Missing parameters for command %q", name)
return false
}
// Copy over parameter values and ensure they are of the right format.
for i := 0; i < lp && i < len(cmd.Params); i++ {
cmd.Params[i].Value = params[i]
if !cmd.Params[i].Valid() {
c.PrivMsg(m.SenderName, "Invalid parameter value %q for command %q",
params[i], name)
return false
}
}
// Execute the command.
if cmd.Execute != nil {
go cmd.Execute(cmd, c, m)
}
return true
}
示例13: Load
func (p *Plugin) Load(c *proto.Client) (err error) {
err = p.Base.Load(c)
if err != nil {
return
}
comm := new(cmd.Command)
comm.Name = "quit"
comm.Description = "Unconditionally quit the bot program"
comm.Restricted = true
comm.Execute = func(cmd *cmd.Command, c *proto.Client, m *proto.Message) {
c.Quit("")
}
cmd.Register(comm)
comm = new(cmd.Command)
comm.Name = "join"
comm.Description = "Join the given channel"
comm.Restricted = true
comm.Params = []cmd.Param{
{Name: "channel", Optional: false, Pattern: cmd.RegChannel},
{Name: "key", Optional: true, Pattern: cmd.RegAny},
{Name: "chanservpass", Optional: true, Pattern: cmd.RegAny},
}
comm.Execute = func(cmd *cmd.Command, c *proto.Client, m *proto.Message) {
var ch irc.Channel
ch.Name = cmd.Params[0].Value
if len(cmd.Params) > 1 {
ch.Key = cmd.Params[1].Value
}
if len(cmd.Params) > 2 {
ch.ChanservPassword = cmd.Params[2].Value
}
c.Join(&ch)
}
cmd.Register(comm)
comm = new(cmd.Command)
comm.Name = "leave"
comm.Description = "Leave the given channel"
comm.Restricted = true
comm.Params = []cmd.Param{
{Name: "channel", Optional: true, Pattern: cmd.RegChannel},
}
comm.Execute = func(cmd *cmd.Command, c *proto.Client, m *proto.Message) {
var ch irc.Channel
if len(cmd.Params) > 0 {
ch.Name = cmd.Params[0].Value
} else {
if !m.FromChannel() {
return
}
ch.Name = m.Receiver
}
c.Part(&ch)
}
cmd.Register(comm)
return
}
示例14: onJoinChannels
// onJoinChannels is used to complete the login procedure.
// We have just received the server's MOTD and now is a good time to
// start joining channels.
func onJoinChannels(c *proto.Client, m *proto.Message) {
c.Join(config.Channels)
}
示例15: onPing
// onPing handles PING messages.
func onPing(c *proto.Client, m *proto.Message) {
c.Pong(m.Data)
}