client.ReplyNicknamed("251", fmt.Sprintf("There are %d users and 0 invisible on 1 servers", lusers))
}
client.ReplyNicknamed("251", fmt.Sprintf("There are %d users and 0 invisible on 1 servers", lusers))
}
var subscriber *Client
for _, nickname := range nicknames {
nickname = strings.ToLower(nickname)
var subscriber *Client
for _, nickname := range nicknames {
nickname = strings.ToLower(nickname)
client.ReplyNicknamed("301", *c.nickname, *c.away)
}
subscriptions = make([]string, 0)
client.ReplyNicknamed("301", *c.nickname, *c.away)
}
subscriptions = make([]string, 0)
for _, room = range rooms {
for subscriber = range room.members {
if *subscriber.nickname == nickname {
for _, room = range rooms {
for subscriber = range room.members {
if *subscriber.nickname == nickname {
sort.Strings(subscriptions)
client.ReplyNicknamed("319", *c.nickname, strings.Join(subscriptions, " "))
client.ReplyNicknamed("318", *c.nickname, "End of /WHOIS list")
sort.Strings(subscriptions)
client.ReplyNicknamed("319", *c.nickname, strings.Join(subscriptions, " "))
client.ReplyNicknamed("318", *c.nickname, "End of /WHOIS list")
rs = strings.Split(strings.Split(cols[1], " ")[0], ",")
} else {
rs = make([]string, 0)
rs = strings.Split(strings.Split(cols[1], " ")[0], ",")
} else {
rs = make([]string, 0)
case "NICK":
if len(cols) == 1 || len(cols[1]) < 1 {
client.ReplyParts("431", "No nickname given")
case "NICK":
if len(cols) == 1 || len(cols[1]) < 1 {
client.ReplyParts("431", "No nickname given")
// Compatibility with some clients prepending colons to nickname
nickname = strings.TrimPrefix(nickname, ":")
nickname = strings.ToLower(nickname)
// Compatibility with some clients prepending colons to nickname
nickname = strings.TrimPrefix(nickname, ":")
nickname = strings.ToLower(nickname)
client.ReplyParts("433", "*", nickname, "Nickname is already in use")
return
}
}
client.ReplyParts("433", "*", nickname, "Nickname is already in use")
return
}
}
if !RENickname.MatchString(nickname) {
client.ReplyParts("432", "*", cols[1], "Erroneous nickname")
return
if !RENickname.MatchString(nickname) {
client.ReplyParts("432", "*", cols[1], "Erroneous nickname")
return
func RoomRegister(name string) (*Room, chan ClientEvent) {
roomNew := NewRoom(name)
roomSink := make(chan ClientEvent)
func RoomRegister(name string) (*Room, chan ClientEvent) {
roomNew := NewRoom(name)
roomSink := make(chan ClientEvent)
for roomExisting, roomSink = range roomSinks {
if room == *roomExisting.name {
for roomExisting, roomSink = range roomSinks {
if room == *roomExisting.name {
roomNew, roomSink = RoomRegister(room)
log.Println("Room", roomNew, "created")
if key != "" {
roomNew, roomSink = RoomRegister(room)
log.Println("Room", roomNew, "created")
if key != "" {
for c := range clients {
if c.recvTimestamp.Add(PingTimeout).Before(now) {
log.Println(c, "ping timeout")
for c := range clients {
if c.recvTimestamp.Add(PingTimeout).Before(now) {
log.Println(c, "ping timeout")
for rn, r := range rooms {
if *statedir == "" && len(r.members) == 0 {
log.Println(rn, "emptied room")
for rn, r := range rooms {
if *statedir == "" && len(r.members) == 0 {
log.Println(rn, "emptied room")
for _, sink := range roomSinks {
sink <- ClientEvent{eventType: EventTerm}
}
for _, sink := range roomSinks {
sink <- ClientEvent{eventType: EventTerm}
}
case EventMsg:
cols := strings.SplitN(event.text, " ", 2)
cmd := strings.ToUpper(cols[0])
case EventMsg:
cols := strings.SplitN(event.text, " ", 2)
cmd := strings.ToUpper(cols[0])
for _, room := range strings.Split(rs, ",") {
if r, found := rooms[room]; found {
roomSinks[r] <- ClientEvent{client, EventDel, ""}
} else {
client.ReplyNoChannel(room)
for _, room := range strings.Split(rs, ",") {
if r, found := rooms[room]; found {
roomSinks[r] <- ClientEvent{client, EventDel, ""}
} else {
client.ReplyNoChannel(room)
for c := range clients {
if *c.nickname == target {
msg = fmt.Sprintf(":%s %s %s %s", client, cmd, *c.nickname, cols[1])
for c := range clients {
if *c.nickname == target {
msg = fmt.Sprintf(":%s %s %s %s", client, cmd, *c.nickname, cols[1])
if r, found := rooms[target]; found {
roomSinks[r] <- ClientEvent{
client,
if r, found := rooms[target]; found {
roomSinks[r] <- ClientEvent{
client,
case "TOPIC":
if len(cols) == 1 {
client.ReplyNotEnoughParameters("TOPIC")
continue
}
cols = strings.SplitN(cols[1], " ", 2)
case "TOPIC":
if len(cols) == 1 {
client.ReplyNotEnoughParameters("TOPIC")
continue
}
cols = strings.SplitN(cols[1], " ", 2)
case "WHO":
if len(cols) == 1 || len(cols[1]) < 1 {
client.ReplyNotEnoughParameters("WHO")
continue
}
room := strings.Split(cols[1], " ")[0]
case "WHO":
if len(cols) == 1 || len(cols[1]) < 1 {
client.ReplyNotEnoughParameters("WHO")
continue
}
room := strings.Split(cols[1], " ")[0]
if r, found := rooms[room]; found {
roomSinks[r] <- ClientEvent{client, EventWho, ""}
} else {
client.ReplyNoChannel(room)
}
if r, found := rooms[room]; found {
roomSinks[r] <- ClientEvent{client, EventWho, ""}
} else {
client.ReplyNoChannel(room)
}
var nicksExists []string
for _, nickname := range strings.Split(cols[1], " ") {
if _, exists := nicksKnown[nickname]; exists {
var nicksExists []string
for _, nickname := range strings.Split(cols[1], " ") {
if _, exists := nicksKnown[nickname]; exists {