This commit is contained in:
Ken Piper 2014-12-13 18:35:06 -05:00
commit 8c690d0676
3 changed files with 38 additions and 1 deletions

View File

@ -1,4 +1,4 @@
FROM golang:1.3.3
FROM golang:1.4
MAINTAINER Alvin Lai <al@alvinlai.com>
RUN apt-get update

View File

@ -22,6 +22,7 @@ const HELP_TEXT string = SYSTEM_MESSAGE_FORMAT + `-> Available commands:
/nick $NAME - Rename yourself to a new name.
/whois $NAME - Display information about another connected user.
/msg $NAME $MESSAGE - Sends a private message to a user.
/motd - Prints the Message of the Day
` + RESET
const OP_HELP_TEXT string = SYSTEM_MESSAGE_FORMAT + `-> Available operator commands:
@ -33,6 +34,7 @@ const OP_HELP_TEXT string = SYSTEM_MESSAGE_FORMAT + `-> Available operator comma
/kick $NAME - Kick em' out.
/op $NAME - Promote a user to server operator.
/silence $NAME - Revoke a user's ability to speak.
/motd $MESSAGE - Sets the Message of the Day
` + RESET
const ABOUT_TEXT string = SYSTEM_MESSAGE_FORMAT + `-> ssh-chat is made by @shazow.
@ -319,6 +321,21 @@ func (c *Client) handleShell(channel ssh.Channel) {
if err := c.Server.Privmsg(parts[1], parts[2], c); nil != err {
c.Msg <- fmt.Sprintf("Unable to send message to %v: %v", parts[1], err)
}
case "/motd": /* print motd */
if !c.Server.IsOp(c) {
c.Server.MotdUnicast(c)
} else if len(parts) < 2 {
c.Server.MotdUnicast(c)
} else {
var newmotd string
if (len(parts) == 2) {
newmotd = parts[1]
} else {
newmotd = parts[1] + " " + parts[2]
}
c.Server.SetMotd(c, newmotd)
c.Server.MotdBroadcast(c)
}
default:
c.SysMsg("Invalid command: %s", line)

View File

@ -30,6 +30,7 @@ type Server struct {
lock sync.Mutex
count int
history *History
motd string
admins map[string]struct{} // fingerprint lookup
bannedPk map[string]*time.Time // fingerprint lookup
bannedIp map[net.Addr]*time.Time
@ -47,6 +48,7 @@ func NewServer(privateKey []byte) (*Server, error) {
clients: Clients{},
count: 0,
history: NewHistory(HISTORY_LEN),
motd: "Message of the Day! Modify with /motd",
admins: map[string]struct{}{},
bannedPk: map[string]*time.Time{},
bannedIp: map[net.Addr]*time.Time{},
@ -115,8 +117,26 @@ func (s *Server) Privmsg(nick, message string, sender *Client) error {
return nil
}
func (s *Server) SetMotd(client *Client, motd string) {
s.lock.Lock()
s.motd = motd
s.lock.Unlock()
}
func (s *Server) MotdUnicast(client *Client) {
client.SysMsg("/** MOTD")
client.SysMsg(" * " + ColorString("36", s.motd)) /* a nice cyan color */
client.SysMsg(" **/")
}
func (s *Server) MotdBroadcast(client *Client) {
s.Broadcast(ContinuousFormat(SYSTEM_MESSAGE_FORMAT, fmt.Sprintf(" * New MOTD set by %s.", client.ColoredName())), client)
s.Broadcast(" /**\r\n" + " * " + ColorString("36", s.motd) + "\r\n **/", client)
}
func (s *Server) Add(client *Client) {
go func() {
s.MotdUnicast(client)
client.SendLines(s.history.Get(10))
client.SysMsg("Welcome to ssh-chat. Enter /help for more.")
}()