Tell us who is still there
parent
9696835270
commit
3d93dcefa5
9
at.go
9
at.go
|
@ -67,16 +67,21 @@ func (a *atMonitor) Run(c *irc.Client, done chan bool) {
|
|||
|
||||
arrived := listSubtract(current, a.previousUserList)
|
||||
left := listSubtract(a.previousUserList, current)
|
||||
alsoThere := listSubtract(a.previousUserList, left)
|
||||
|
||||
if len(arrived) > 0 {
|
||||
diffText = fmt.Sprint(" +", arrived)
|
||||
diffText = fmt.Sprint(" arrived: ", arrived)
|
||||
}
|
||||
|
||||
if len(left) > 0 {
|
||||
diffText = fmt.Sprint(" -", left)
|
||||
diffText += fmt.Sprint(" left: ", left)
|
||||
}
|
||||
|
||||
if len(diffText) > 0 {
|
||||
if len(alsoThere) > 0 {
|
||||
diffText += fmt.Sprint(" also there: ", alsoThere)
|
||||
}
|
||||
|
||||
msg := fmt.Sprintf("NOTICE %s :%s\n", a.channel, diffText)
|
||||
log.Println(diffText)
|
||||
c.Write(msg)
|
||||
|
|
25
jitsi.go
25
jitsi.go
|
@ -77,6 +77,14 @@ type JitsiClient struct {
|
|||
users map[string]string // map[jid]nick
|
||||
}
|
||||
|
||||
func (j *JitsiClient) UserListZWS() (ret []string) {
|
||||
for _, user := range j.users {
|
||||
u := user[:1] + "\u200B" + user[1:]
|
||||
ret = append(ret, u)
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
func (j *JitsiClient) KeepAlive(ws *websocket.Conn) {
|
||||
ticker := time.NewTicker(5 * time.Second)
|
||||
|
||||
|
@ -136,6 +144,7 @@ func (j *JitsiClient) Run(c *irc.Client, done chan bool) {
|
|||
log.Println("JitsiClient", j.server, j.room, "Shutting down")
|
||||
return
|
||||
default:
|
||||
var alsoThere string
|
||||
_, err := ws.Read(msg)
|
||||
v := JitsiPresence{}
|
||||
|
||||
|
@ -150,6 +159,10 @@ func (j *JitsiClient) Run(c *irc.Client, done chan bool) {
|
|||
continue
|
||||
}
|
||||
|
||||
if v.Nick.Text == j.nick {
|
||||
continue
|
||||
}
|
||||
|
||||
if v.Nick.Text != "" { // if presence event has Nick present, it *shouldn't* mean that user has left the chat
|
||||
if v.X.Item.Jid != "" {
|
||||
if knownNick, ok := j.users[v.X.Item.Jid]; ok {
|
||||
|
@ -159,9 +172,13 @@ func (j *JitsiClient) Run(c *irc.Client, done chan bool) {
|
|||
continue
|
||||
}
|
||||
} else { // new user
|
||||
previousList := j.UserListZWS()
|
||||
if len(previousList) > 0 {
|
||||
alsoThere = fmt.Sprint(", also there:", previousList)
|
||||
}
|
||||
j.users[v.X.Item.Jid] = v.Nick.Text
|
||||
nickZws := v.Nick.Text[:1] + "\u200B" + v.Nick.Text[1:]
|
||||
ircMsg := fmt.Sprintf("NOTICE %s :jitsi: +%s\n", j.ircChannel, nickZws)
|
||||
ircMsg := fmt.Sprintf("NOTICE %s :jitsi: +%s%s\n", j.ircChannel, nickZws, alsoThere)
|
||||
log.Println("JitsiClient", j.server, j.room, "User joined:", j.users[v.X.Item.Jid])
|
||||
c.Write(ircMsg)
|
||||
continue
|
||||
|
@ -172,8 +189,12 @@ func (j *JitsiClient) Run(c *irc.Client, done chan bool) {
|
|||
if v.X.Item.Jid != "" {
|
||||
if knownNick, ok := j.users[v.X.Item.Jid]; ok {
|
||||
delete(j.users, v.X.Item.Jid)
|
||||
userList := j.UserListZWS()
|
||||
if len(userList) > 0 {
|
||||
alsoThere = fmt.Sprint(", still there:", userList)
|
||||
}
|
||||
nickZws := knownNick[:1] + "\u200B" + knownNick[1:]
|
||||
ircMsg := fmt.Sprintf("NOTICE %s :jitsi: -%s\n", j.ircChannel, nickZws)
|
||||
ircMsg := fmt.Sprintf("NOTICE %s :jitsi: -%s%s\n", j.ircChannel, nickZws, alsoThere)
|
||||
log.Println("JitsiClient", j.server, j.room, "User left:", knownNick)
|
||||
c.Write(ircMsg)
|
||||
continue
|
||||
|
|
Loading…
Reference in New Issue