mirror of
https://github.com/shazow/ssh-chat.git
synced 2025-06-13 13:52:08 +03:00
Merge b6e789e0653392b3769d8e9853d8addcdd064c88 into 50001bf1727c8ec7fcfc3ae78ab66a125016d13e
This commit is contained in:
commit
f067bf46dd
@ -108,7 +108,9 @@ func (m PublicMsg) Render(t *Theme) string {
|
|||||||
if t == nil {
|
if t == nil {
|
||||||
return m.String()
|
return m.String()
|
||||||
}
|
}
|
||||||
|
if (m.From().GetTimeStampVisible()) {
|
||||||
|
return fmt.Sprintf("[%s] %s: %s", time.Now().Format("15:04:05"), t.ColorName(m.from), m.body)
|
||||||
|
}
|
||||||
return fmt.Sprintf("%s: %s", t.ColorName(m.from), m.body)
|
return fmt.Sprintf("%s: %s", t.ColorName(m.from), m.body)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -125,10 +127,16 @@ func (m PublicMsg) RenderFor(cfg UserConfig) string {
|
|||||||
if cfg.Bell {
|
if cfg.Bell {
|
||||||
body += Bel
|
body += Bel
|
||||||
}
|
}
|
||||||
|
if (m.From().GetTimeStampVisible()) {
|
||||||
|
return fmt.Sprintf("[%s] %s: %s", time.Now().Format("15:04:05"), cfg.Theme.ColorName(m.from), m.body)
|
||||||
|
}
|
||||||
return fmt.Sprintf("%s: %s", cfg.Theme.ColorName(m.from), body)
|
return fmt.Sprintf("%s: %s", cfg.Theme.ColorName(m.from), body)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m PublicMsg) String() string {
|
func (m PublicMsg) String() string {
|
||||||
|
if (m.From().GetTimeStampVisible()) {
|
||||||
|
return fmt.Sprintf("[%s] %s: %s", time.Now().Format("15:04:05"), m.from.Name(), m.body)
|
||||||
|
}
|
||||||
return fmt.Sprintf("%s: %s", m.from.Name(), m.body)
|
return fmt.Sprintf("%s: %s", m.from.Name(), m.body)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -151,6 +159,9 @@ func NewEmoteMsg(body string, from *User) *EmoteMsg {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m EmoteMsg) Render(t *Theme) string {
|
func (m EmoteMsg) Render(t *Theme) string {
|
||||||
|
if (m.from.GetTimeStampVisible()) {
|
||||||
|
return fmt.Sprintf("[%s] ** %s %s", time.Now().Format("15:04:05"), m.from.Name(), m.body)
|
||||||
|
}
|
||||||
return fmt.Sprintf("** %s %s", m.from.Name(), m.body)
|
return fmt.Sprintf("** %s %s", m.from.Name(), m.body)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -177,6 +188,9 @@ func (m PrivateMsg) To() *User {
|
|||||||
|
|
||||||
func (m PrivateMsg) Render(t *Theme) string {
|
func (m PrivateMsg) Render(t *Theme) string {
|
||||||
s := fmt.Sprintf("[PM from %s] %s", m.from.Name(), m.body)
|
s := fmt.Sprintf("[PM from %s] %s", m.from.Name(), m.body)
|
||||||
|
if (m.from.GetTimeStampVisible()) {
|
||||||
|
s = fmt.Sprintf("[%s][PM from %s] %s", time.Now().Format("15:04:05"), m.from.Name(), m.body)
|
||||||
|
}
|
||||||
if t == nil {
|
if t == nil {
|
||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
@ -33,6 +33,7 @@ type User struct {
|
|||||||
mu sync.Mutex
|
mu sync.Mutex
|
||||||
config UserConfig
|
config UserConfig
|
||||||
replyTo *User // Set when user gets a /msg, for replying.
|
replyTo *User // Set when user gets a /msg, for replying.
|
||||||
|
TimeStamp bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewUser(identity Identifier) *User {
|
func NewUser(identity Identifier) *User {
|
||||||
@ -43,6 +44,7 @@ func NewUser(identity Identifier) *User {
|
|||||||
msg: make(chan Message, messageBuffer),
|
msg: make(chan Message, messageBuffer),
|
||||||
done: make(chan struct{}),
|
done: make(chan struct{}),
|
||||||
Ignored: set.New(),
|
Ignored: set.New(),
|
||||||
|
TimeStamp: false,
|
||||||
}
|
}
|
||||||
u.setColorIdx(rand.Int())
|
u.setColorIdx(rand.Int())
|
||||||
|
|
||||||
@ -74,6 +76,20 @@ func (u *User) SetID(id string) {
|
|||||||
u.setColorIdx(rand.Int())
|
u.setColorIdx(rand.Int())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Sets visiblity of timestamp.
|
||||||
|
func (u *User) SetTimeStampVisible(TSvis bool) {
|
||||||
|
u.mu.Lock()
|
||||||
|
defer u.mu.Unlock()
|
||||||
|
u.TimeStamp = TSvis
|
||||||
|
}
|
||||||
|
|
||||||
|
// Gets visibility status of timestamp.
|
||||||
|
func (u *User) GetTimeStampVisible() bool {
|
||||||
|
u.mu.Lock()
|
||||||
|
defer u.mu.Unlock()
|
||||||
|
return u.TimeStamp
|
||||||
|
}
|
||||||
|
|
||||||
// ReplyTo returns the last user that messaged this user.
|
// ReplyTo returns the last user that messaged this user.
|
||||||
func (u *User) ReplyTo() *User {
|
func (u *User) ReplyTo() *User {
|
||||||
u.mu.Lock()
|
u.mu.Lock()
|
||||||
|
@ -36,6 +36,7 @@ type Options struct {
|
|||||||
Motd string `long:"motd" description:"Optional Message of the Day file."`
|
Motd string `long:"motd" description:"Optional Message of the Day file."`
|
||||||
Log string `long:"log" description:"Write chat log to this file."`
|
Log string `long:"log" description:"Write chat log to this file."`
|
||||||
Pprof int `long:"pprof" description:"Enable pprof http server for profiling."`
|
Pprof int `long:"pprof" description:"Enable pprof http server for profiling."`
|
||||||
|
TStamps bool `long:"timestamps" description:"Enable"`
|
||||||
}
|
}
|
||||||
|
|
||||||
var logLevels = []log.Level{
|
var logLevels = []log.Level{
|
||||||
@ -122,6 +123,7 @@ func main() {
|
|||||||
host := sshchat.NewHost(s, auth)
|
host := sshchat.NewHost(s, auth)
|
||||||
host.SetTheme(message.Themes[0])
|
host.SetTheme(message.Themes[0])
|
||||||
host.Version = Version
|
host.Version = Version
|
||||||
|
host.SetTimeStamp(options.TStamps)
|
||||||
|
|
||||||
err = fromFile(options.Admin, func(line []byte) error {
|
err = fromFile(options.Admin, func(line []byte) error {
|
||||||
key, _, _, _, err := ssh.ParseAuthorizedKey(line)
|
key, _, _, _, err := ssh.ParseAuthorizedKey(line)
|
||||||
|
20
host.go
20
host.go
@ -25,6 +25,12 @@ func GetPrompt(user *message.User) string {
|
|||||||
if cfg.Theme != nil {
|
if cfg.Theme != nil {
|
||||||
name = cfg.Theme.ColorName(user)
|
name = cfg.Theme.ColorName(user)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// user timestamp visibility prompt format
|
||||||
|
if (user.GetTimeStampVisible()) {
|
||||||
|
return fmt.Sprintf("[%s][%s] ", time.Now().Format("15:04:05"), name)
|
||||||
|
}
|
||||||
|
|
||||||
return fmt.Sprintf("[%s] ", name)
|
return fmt.Sprintf("[%s] ", name)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -45,6 +51,7 @@ type Host struct {
|
|||||||
mu sync.Mutex
|
mu sync.Mutex
|
||||||
motd string
|
motd string
|
||||||
count int
|
count int
|
||||||
|
tstamp bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewHost creates a Host on top of an existing listener.
|
// NewHost creates a Host on top of an existing listener.
|
||||||
@ -66,6 +73,13 @@ func NewHost(listener *sshd.SSHListener, auth *Auth) *Host {
|
|||||||
return &h
|
return &h
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetTimeStamp sets the visibility of the timestamp globally in messages.
|
||||||
|
func (h *Host) SetTimeStamp(vis bool) {
|
||||||
|
h.mu.Lock()
|
||||||
|
h.tstamp = vis
|
||||||
|
h.mu.Unlock()
|
||||||
|
}
|
||||||
|
|
||||||
// SetTheme sets the default theme for the host.
|
// SetTheme sets the default theme for the host.
|
||||||
func (h *Host) SetTheme(theme message.Theme) {
|
func (h *Host) SetTheme(theme message.Theme) {
|
||||||
h.mu.Lock()
|
h.mu.Lock()
|
||||||
@ -123,6 +137,12 @@ func (h *Host) Connect(term *sshd.Terminal) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set global timestamp visibility in messages if the option was
|
||||||
|
// specified on the command line.
|
||||||
|
if (h.tstamp) {
|
||||||
|
user.SetTimeStampVisible(true)
|
||||||
|
}
|
||||||
|
|
||||||
// Successfully joined.
|
// Successfully joined.
|
||||||
term.SetPrompt(GetPrompt(user))
|
term.SetPrompt(GetPrompt(user))
|
||||||
term.AutoCompleteCallback = h.AutoCompleteFunction(user)
|
term.AutoCompleteCallback = h.AutoCompleteFunction(user)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user