本文整理汇总了Golang中github.com/jteeuwen/ircb/proto.Client.PrivMsg方法的典型用法代码示例。如果您正苦于以下问题:Golang Client.PrivMsg方法的具体用法?Golang Client.PrivMsg怎么用?Golang Client.PrivMsg使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/jteeuwen/ircb/proto.Client
的用法示例。
在下文中一共展示了Client.PrivMsg方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的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: 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
}
示例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: 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))
}
示例5: 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
}
示例6: 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
}
示例7: 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
}
示例8: Load
func (p *Plugin) Load(c *proto.Client) (err error) {
err = p.Base.Load(c)
if err != nil {
return
}
ini := p.LoadConfig()
if ini == nil {
log.Fatalf("[ipintel] No configuration found.")
return
}
key := ini.Section("api").S("key", "")
if len(key) == 0 {
log.Fatalf("[ipintel] No API key found.")
return
}
shared := ini.Section("api").S("shared", "")
if len(shared) == 0 {
log.Fatalf("[ipintel] No API shared secret found.")
return
}
drift := ini.Section("api").I64("drift", 0)
if len(shared) == 0 {
log.Fatalf("[ipintel] No API shared secret found.")
return
}
w := new(cmd.Command)
w.Name = "loc"
w.Description = "Fetch geo-location data for the given IP address."
w.Restricted = false
w.Params = []cmd.Param{
{Name: "ip", Description: "IPv4 address to look up", Pattern: cmd.RegIPv4},
}
w.Execute = func(cmd *cmd.Command, c *proto.Client, m *proto.Message) {
hash := md5.New()
stamp := fmt.Sprintf("%d", time.Now().UTC().Unix()+drift)
io.WriteString(hash, key+shared+stamp)
sig := fmt.Sprintf("%x", hash.Sum(nil))
target := fmt.Sprintf(url, cmd.Params[0].Value, key, sig)
resp, err := http.Get(target)
if err != nil {
log.Printf("[ipintel]: %v", err)
return
}
body, err := ioutil.ReadAll(resp.Body)
resp.Body.Close()
if err != nil {
log.Printf("[ipintel]: %v", err)
return
}
var data Response
err = json.Unmarshal(body, &data)
if err != nil {
log.Printf("[ipintel]: %v", err)
return
}
inf := data.IPInfo
mapsURL := fmt.Sprintf("https://maps.google.com/maps?q=%f,%f",
inf.Location.Latitude, inf.Location.Longitude)
c.PrivMsg(m.Receiver,
"%s: %s (%s), Network org.: %s, Carrier: %s, TLD: %s, SLD: %s. "+
"Location: %s/%s/%s/%s (%f, %f). Postalcode: %s, Timezone: %d, %s",
m.SenderName,
inf.IPAddress, inf.IPType,
inf.Network.Organization,
inf.Network.Carrier,
inf.Network.Domain.TLD,
inf.Network.Domain.SLD,
inf.Location.Continent,
inf.Location.CountryData.Name,
inf.Location.StateData.Name,
inf.Location.CityData.Name,
inf.Location.Latitude,
inf.Location.Longitude,
inf.Location.CityData.PostalCode,
inf.Location.CityData.TimeZone,
mapsURL,
)
}
cmd.Register(w)
w = new(cmd.Command)
w.Name = "mibbit"
w.Description = "Resolve a mibbit address to a real IP address."
w.Restricted = false
//.........这里部分代码省略.........
示例9: Load
func (p *Plugin) Load(c *proto.Client) (err error) {
err = p.Base.Load(c)
if err != nil {
return
}
ini := p.LoadConfig()
if ini == nil {
log.Fatalf("[weather] No API key found.")
return
}
key := ini.Section("api").S("key", "")
if len(key) == 0 {
log.Fatalf("[weather] No API key found.")
return
}
w := new(cmd.Command)
w.Name = "weather"
w.Description = "Fetch the current weather for a given location"
w.Restricted = false
w.Params = []cmd.Param{
{Name: "location", Description: "Name of the city/town for the forecast", Pattern: cmd.RegAny},
}
w.Execute = func(cmd *cmd.Command, c *proto.Client, m *proto.Message) {
location := url.QueryEscape(cmd.Params[0].Value)
resp, err := http.Get(fmt.Sprintf(_url, location, key))
if err != nil {
return
}
data, err := ioutil.ReadAll(resp.Body)
resp.Body.Close()
if err != nil {
return
}
var wd WeatherData
err = json.Unmarshal(data, &wd)
if err != nil {
return
}
if len(wd.Data.Request) == 0 || len(wd.Data.Conditions) == 0 {
c.PrivMsg(m.Receiver, "%s: No weather data for %q",
m.SenderName, cmd.Params[0].Value)
return
}
wr := wd.Data.Request[0]
wc := wd.Data.Conditions[0]
c.PrivMsg(m.Receiver,
"%s, weather in %s: %s°C/%s°F/%.2f°K, %s, cloud cover: %s%%, humidity: %s%%, wind: %skph/%smph from %s, pressure: %s mb, visibility: %s km",
m.SenderName, wr.Query,
wc.TempC, wc.TempF, wd.TempK(), codeName(wc.WeatherCode),
wc.CloudCover, wc.Humidity, wc.WindSpeedKmph, wc.WindSpeedMiles,
wc.WindDir16Point, wc.Pressure, wc.Visibility,
)
}
cmd.Register(w)
return
}