Tell us who is still there

main
Robert Gerus 2022-01-16 02:23:22 +01:00
parent 9696835270
commit 3d93dcefa5
2 changed files with 39 additions and 13 deletions

9
at.go
View File

@ -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)

View File

@ -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