本文整理汇总了Golang中oddcomm/src/core.Channel类的典型用法代码示例。如果您正苦于以下问题:Golang Channel类的具体用法?Golang Channel怎么用?Golang Channel使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Channel类的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: cmdOkick
func cmdOkick(source interface{}, params [][]byte) {
c := source.(*client.Client)
var ch *core.Channel
var target *core.User
channame := string(params[0])
if channame[0] == '#' {
channame = channame[1:]
}
if ch = core.FindChannel("", channame); ch == nil {
return
}
if target = core.GetUserByNick(string(params[1])); target == nil {
return
}
perm, err := perm.CheckRemovePerm("", c.User(), target, ch)
if perm < -1000000 {
c.SendLineTo(nil, "482", "#%s :%s", ch.Name(), err)
return
}
var message string
if len(params) > 2 {
message = string(params[2])
}
ch.Remove(nil, nil, target, message)
}
示例2: HasOpFlag
// HasOpFlag returns whether the user has the given op flag.
// This both checks for the presence of the flag, and, if the flag is default,
// the "on" keyword for default privileges. This function should not be used as
// a direct means of determining a user's ability to do something; instead,
// the appropriate permission check should be used, as this permits module to
// hook the check on other conditions. It should be used IN said permission
// hooks.
//
// If ch is non-nil, this is a channel op flag check and the user's membership
// entry on the channel will be checked. If no such entry exists, the check
// automatically fails. If ch is nil, this is a server op flag check, and the user's own metadata will be checked.
func HasOpFlag(u *core.User, ch *core.Channel, flag string) bool {
var e core.Extensible
var defwords []string
if ch == nil {
e = u
defwords = defServerOp
} else {
if m := ch.GetMember(u); m != nil {
e = m
} else {
return false
}
defwords = defChanOp
}
words := strings.Fields(e.Data("op"))
for _, word := range words {
if word == flag {
return true
}
if word == "on" {
for _, defword := range defwords {
if defword == flag {
return true
}
}
}
}
return false
}
示例3: voiceOverride
// Voiced users overrride most restrictions on speaking.
func voiceOverride(_ string, source *core.User, target *core.Channel, msg []byte) (int, os.Error) {
if m := target.GetMember(source); m != nil {
if m.Data("voiced") != "" {
return 100, nil
}
}
return 0, nil
}
示例4: stupidInvite
// If the target is already in a channel, you can't invite them.
// This is deliberately weaker than externalInvite, so external users cannot
// use invites to see whether a user is in the channel.
func stupidInvite(_ string, source, target *core.User, msg []byte) (int, os.Error) {
var ch *core.Channel
if ch = core.FindChannel("", string(msg)); ch == nil {
return -100, os.NewError("No such channel.")
}
if m := ch.GetMember(target); m != nil {
return -99, os.NewError("The target is already in that channel.")
}
return 0, nil
}
示例5: opKickImmune
// Channel operators are immune to being removed by anything below server op
// level aside themselves. They must be deopped first.
func opKickImmune(_ string, source, target *core.User, ch *core.Channel) (int, os.Error) {
if source == target {
return 0, nil
}
if m := ch.GetMember(target); m != nil {
if m.Data("op") != "" {
return -1000000, os.NewError("Target user is an operator, and cannot be kicked without being deopped.")
}
}
return 0, nil
}
示例6: CheckChanViewDataPerm
// CheckChanViewDataPerm returns the full permissions value for
// CheckChanViewData.
func CheckChanViewDataPerm(pkg string, u *core.User, ch *core.Channel, name string) (int, os.Error) {
f := func(h interface{}) (int, os.Error) {
f, ok := h.(func(string, *core.User, *core.Channel, string) (int, os.Error))
if ok && f != nil {
return f(pkg, u, ch, name)
}
return 0, nil
}
return runPermHooks(checkChanViewData[ch.Type()], f, false)
}
示例7: CheckChanViewPerm
// CheckChanViewPerm returns the full permissions value for CheckChanView.
// This is not at present hookable.
func CheckChanViewPerm(pkg string, u *core.User, ch *core.Channel) (int, os.Error) {
if m := ch.GetMember(u); m != nil {
return 100, nil
}
if ch.Data("hidden") == "" {
return 1, nil
}
return -1, os.NewError("Channel is hidden.")
}
示例8: externalInvite
// If a user is not in a channel, they don't get to invite users into it.
func externalInvite(_ string, source, target *core.User, msg []byte) (int, os.Error) {
if source == nil {
return 0, nil
}
var ch *core.Channel
if ch = core.FindChannel("", string(msg)); ch == nil {
return -100, os.NewError("No such channel.")
}
if m := ch.GetMember(source); m == nil {
return -100, os.NewError("You are not in that channel.")
}
return 0, nil
}
示例9: cmdWho
func cmdWho(source interface{}, params [][]byte) {
c := source.(*Client)
channame := string(params[0])
if channame[0] == '#' {
channame = channame[1:]
}
var ch *core.Channel
if ch = core.FindChannel("", channame); ch == nil {
c.SendLineTo(nil, "403", "#%s :No such channel.", channame)
return
}
// If the user isn't on the channel, don't let them check unless they
// can view private channel data.
if m := ch.GetMember(c.u); m == nil {
if ok, err := perm.CheckChanViewData(me, c.u, ch, "members"); !ok {
c.SendLineTo(nil, "482", "#%s :%s", ch.Name(), err)
return
}
}
it := ch.Users()
c.WriteBlock(func() []byte {
if it == nil {
return nil
}
user := it.User()
var prefixes string
if user.Data("away") == "" {
prefixes += "H"
} else {
prefixes += "G"
}
if user.Data("op") != "" {
prefixes += "*"
}
prefixes += ChanModes.GetPrefixes(it)
servername := core.Global.Data("name")
result := fmt.Sprintf(":%s 352 %s #%s %s %s %s %s %s :0 %s\r\n",
servername, c.u.Nick(), channame, user.GetIdent(),
user.GetHostname(), servername, user.Nick(),
prefixes, user.Data("realname"))
it = it.ChanNext()
return []byte(result)
})
c.SendLineTo(nil, "315", "%s :End of /WHO list.", params[0])
}
示例10: cmdNames
func cmdNames(source interface{}, params [][]byte) {
c := source.(*Client)
channame := string(params[0])
if len(channame) > 0 && channame[0] == '#' {
channame = channame[1:]
}
var ch *core.Channel
if ch = core.FindChannel("", channame); ch == nil {
c.SendLineTo(nil, "403", "#%s :No such channel.", channame)
return
}
// If the user isn't on the channel, don't let them check unless they
// can view private channel data.
// Otherwise, get their prefixes.
var myprefix string
if m := ch.GetMember(c.u); m == nil {
if ok, err := perm.CheckChanViewData(me, c.u, ch, "members"); !ok {
c.SendLineTo(nil, "482", "#%s :%s", ch.Name(), err)
return
}
myprefix = "="
} else {
myprefix = ChanModes.GetPrefixes(m)
}
it := ch.Users()
c.WriteBlock(func() []byte {
if it == nil {
return nil
}
names := fmt.Sprintf(":%s 353 %s %s #%s :",
core.Global.Data("name"), c.u.Nick(), myprefix,
channame)
for ; it != nil; it = it.ChanNext() {
name := ChanModes.GetPrefixes(it) + it.User().Nick()
if len(names)+len(name) > 508 {
break
}
names += " " + name
}
names += "\r\n"
return []byte(names)
})
c.SendLineTo(nil, "366", "#%s :End of /NAMES list", channame)
}
示例11: externalMsg
// If a user is not in the channel, they don't get to message it.
func externalMsg(_ string, source *core.User, target *core.Channel, msg []byte) (int, os.Error) {
if m := target.GetMember(source); m == nil {
return -100, os.NewError("You are not in the channel.")
}
return 0, nil
}
示例12: cmdOpflags
func cmdOpflags(source interface{}, params [][]byte) {
c := source.(*Client)
channame := string(params[0])
if channame[0] == '#' {
channame = channame[1:]
}
var ch *core.Channel
if ch = core.FindChannel("", channame); ch == nil {
c.SendLineTo(nil, "403", "#%s :No such channel.", channame)
return
}
// If the user isn't on the channel, don't let them check unless they
// can view private channel data.
if m := ch.GetMember(c.u); m == nil {
if ok, err := perm.CheckChanViewData(me, c.u, ch, "members"); !ok {
c.SendLineTo(nil, "482", "#%s :%s", ch.Name(), err)
return
}
}
var target *core.User
if target = core.GetUserByNick(string(params[1])); target == nil {
c.SendLineTo(nil, "401", "%s :No such user.", params[1])
return
}
var m *core.Membership
if m = ch.GetMember(target); m == nil {
c.SendLineTo(nil, "304", ":OPFLAGS #%s: %s is not in the channel.", ch.Name(), target.Nick())
return
}
if ok, err := perm.CheckMemberViewData(me, c.u, m, "op"); !ok {
c.SendLineTo(nil, "482", "#%s :%s: %s", ch.Name(), target.Nick(), err)
return
}
var flags string
if flags = m.Data("op"); flags == "" {
c.SendLineTo(nil, "304", ":OPFLAGS #%s: %s has no channel op flags.", ch.Name(), target.Nick())
return
}
if flags == "on" {
flags = perm.DefaultChanOp()
}
c.SendLineTo(nil, "304", ":OPFLAGS #%s: %s has channel op flags: %s", ch.Name(), target.Nick(), flags)
}
示例13: ParseModeLine
//.........这里部分代码省略.........
if v, ok := p.list[char]; ok {
if param >= len(params) {
missing += string(char)
continue
}
var change core.DataChange
cparam := params[param]
param++
if v, ok := p.extended[char]; ok {
newchanges := v(adding, e, cparam)
for _, it := range newchanges {
if it.Data != "" {
it.Data += fmt.Sprintf(" setby-%s setat-%d", source.GetSetBy(), time.Seconds())
}
changes[it.Name] = it
}
continue
}
if adding {
change.Name = v + " " + cparam
change.Data = fmt.Sprintf("on setby-%s setat-%d", source.GetSetBy(), time.Seconds())
} else {
change.Name = v + " " + cparam
}
changes[change.Name] = change
continue
}
if v, ok := p.membership[char]; ok {
var ch *core.Channel
var ok bool
if ch, ok = e.(*core.Channel); !ok {
continue
}
if param >= len(params) {
missing += string(char)
continue
}
par := params[param]
param++
if v, ok := p.extended[char]; ok {
newchanges := v(adding, e, par)
for _, it := range newchanges {
if it.Member != nil {
changes["m"+it.Member.User().ID()+" "+it.Name] = it
} else {
changes[it.Name] = it
}
}
continue
}
var u *core.User
var m *core.Membership
if u = core.GetUser(par); u == nil {
if u = core.GetUserByNick(par); u == nil {
continue
}
}
if m = ch.GetMember(u); m == nil {
continue
示例14: processOp
// Function handling processing of extended op syntax into metadata.
// It returns the data change object.
func processOp(adding bool, ch *core.Channel, param string) []core.DataChange {
var change core.DataChange
change.Name = "op"
change.Data = perm.DefaultChanOp()
// Find a colon, indicating extended op syntax.
var colon, mask int
colon = strings.IndexRune(param, ':')
if colon > -1 && len(param) > colon+1 {
mask = colon + 1
} else {
colon = -1
}
// Set the member this opping refers to.
if target := core.GetUserByNick(param[mask:]); target != nil {
if m := ch.GetMember(target); m != nil {
change.Member = m
} else {
return nil
}
} else {
return nil
}
// If a colon exists, treat everything before it as opflags.
if colon > -1 {
change.Data = ""
for _, char := range param[:colon] {
if v := Flags.Str(char); v != "" {
if change.Data != "" {
change.Data += " "
}
change.Data += v
}
}
}
// Get the existing op flags, expanding default ops.
existingData := change.Member.Data("op")
words := strings.Fields(existingData)
var existing string
for _, word := range words {
if word == "on" {
word = perm.DefaultChanOp()
}
if existing != "" {
existing += " "
}
existing += word
}
if adding {
// If we're adding the ban, add the new restrictions to the
// previous restrictions.
if existing != "" {
words := strings.Fields(existing)
remwords := strings.Fields(change.Data)
for _, flag := range words {
var found bool
for _, w := range remwords {
if w == flag {
found = true
break
}
}
if !found {
if change.Data != "" {
change.Data += " "
}
change.Data += flag
}
}
}
} else {
// If we're removing the ban, remove the removed restrictions.
// Leave restrictions not removed alone.
// This is "fun". This is also O(n^2).
var left string
if existing != "" {
words := strings.Fields(existing)
remwords := strings.Fields(change.Data)
for _, flag := range words {
var found bool
for _, w := range remwords {
if w == flag {
found = true
break
}
}
if !found && Flags.Char(flag) != 0 {
if left != "" {
left += " "
}
left += flag
}
}
//.........这里部分代码省略.........