Example #1
0
func Whois(c Client, s Server, args []string) {
	if len(args) < 1 {
		c.Send(errors.NeedMoreParams(s.Name(), "WHOIS"))
		return
	}

	subject, ok := s.Find(args[0])
	user, isClient := subject.(Client)

	if !ok || !isClient {
		c.Send(errors.NoSuchNick(s.Name(), args[0]))
		c.Send(reply.EndOfWhois(s.Name(), args[0]))
		return
	}

	if user.AwayMessage() != "" {
		c.Send(reply.Away(s.Name(), user.Name(), user.AwayMessage()))
	}

	c.Send(reply.WhoIsUser(s.Name(), user.Name(), user.UserName(), user.RealName()))
	c.Send(reply.WhoIsServer(s.Name(), user.Name()))

	if user.Channels().Any() {
		resp := reply.WhoIsChannels(s.Name(), user.Name(), user.Channels().Names())
		for _, part := range resp.Parts() {
			c.Send(part)
		}
	}

	c.Send(reply.WhoIsIdle(s.Name(), user.Name(), 0))
	c.Send(reply.EndOfWhois(s.Name(), args[0]))
}
Example #2
0
func Invite(c Client, s Server, args []string) {
	if len(args) < 2 {
		c.Send(errors.NeedMoreParams(s.Name(), "INVITE"))
		return
	}

	subject, ok := s.Find(args[0])
	user, isClient := subject.(Client)

	if !ok || !isClient {
		c.Send(errors.NoSuchNick(s.Name(), args[0]))
		return
	}

	if _, ok := c.Channels().Find(args[1]); !ok {
		c.Send(errors.NotOnChannel(s.Name(), args[1]))
		return
	}

	if _, ok := user.Channels().Find(args[1]); ok {
		c.Send(errors.UserOnChannel(s.Name(), user.Name(), args[1]))
		return
	}

	subject.Send(reply.Invite(c.Name(), c.UserName(), s.Name(), subject.Name(), args[1]))
}