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)
|
arrived := listSubtract(current, a.previousUserList)
|
||||||
left := listSubtract(a.previousUserList, current)
|
left := listSubtract(a.previousUserList, current)
|
||||||
|
alsoThere := listSubtract(a.previousUserList, left)
|
||||||
|
|
||||||
if len(arrived) > 0 {
|
if len(arrived) > 0 {
|
||||||
diffText = fmt.Sprint(" +", arrived)
|
diffText = fmt.Sprint(" arrived: ", arrived)
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(left) > 0 {
|
if len(left) > 0 {
|
||||||
diffText = fmt.Sprint(" -", left)
|
diffText += fmt.Sprint(" left: ", left)
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(diffText) > 0 {
|
if len(diffText) > 0 {
|
||||||
|
if len(alsoThere) > 0 {
|
||||||
|
diffText += fmt.Sprint(" also there: ", alsoThere)
|
||||||
|
}
|
||||||
|
|
||||||
msg := fmt.Sprintf("NOTICE %s :%s\n", a.channel, diffText)
|
msg := fmt.Sprintf("NOTICE %s :%s\n", a.channel, diffText)
|
||||||
log.Println(diffText)
|
log.Println(diffText)
|
||||||
c.Write(msg)
|
c.Write(msg)
|
||||||
|
|
43
jitsi.go
43
jitsi.go
|
@ -77,6 +77,14 @@ type JitsiClient struct {
|
||||||
users map[string]string // map[jid]nick
|
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) {
|
func (j *JitsiClient) KeepAlive(ws *websocket.Conn) {
|
||||||
ticker := time.NewTicker(5 * time.Second)
|
ticker := time.NewTicker(5 * time.Second)
|
||||||
|
|
||||||
|
@ -109,7 +117,7 @@ func (j *JitsiClient) Run(c *irc.Client, done chan bool) {
|
||||||
"<jitsi_participant_region>ffmuc-de1</jitsi_participant_region><videomuted>true</videomuted><audiomuted>true</audiomuted>" +
|
"<jitsi_participant_region>ffmuc-de1</jitsi_participant_region><videomuted>true</videomuted><audiomuted>true</audiomuted>" +
|
||||||
"<jitsi_participant_codecType></jitsi_participant_codecType><nick xmlns=\"http://jabber.org/protocol/nick\">" + j.nick + "</nick></presence>",
|
"<jitsi_participant_codecType></jitsi_participant_codecType><nick xmlns=\"http://jabber.org/protocol/nick\">" + j.nick + "</nick></presence>",
|
||||||
}
|
}
|
||||||
|
|
||||||
j.users = make(map[string]string)
|
j.users = make(map[string]string)
|
||||||
|
|
||||||
for {
|
for {
|
||||||
|
@ -136,6 +144,7 @@ func (j *JitsiClient) Run(c *irc.Client, done chan bool) {
|
||||||
log.Println("JitsiClient", j.server, j.room, "Shutting down")
|
log.Println("JitsiClient", j.server, j.room, "Shutting down")
|
||||||
return
|
return
|
||||||
default:
|
default:
|
||||||
|
var alsoThere string
|
||||||
_, err := ws.Read(msg)
|
_, err := ws.Read(msg)
|
||||||
v := JitsiPresence{}
|
v := JitsiPresence{}
|
||||||
|
|
||||||
|
@ -150,19 +159,27 @@ func (j *JitsiClient) Run(c *irc.Client, done chan bool) {
|
||||||
continue
|
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.Nick.Text != "" { // if presence event has Nick present, it *shouldn't* mean that user has left the chat
|
||||||
if v.X.Item.Jid != "" {
|
if v.X.Item.Jid != "" {
|
||||||
if knownNick, ok := j.users[v.X.Item.Jid]; ok {
|
if knownNick, ok := j.users[v.X.Item.Jid]; ok {
|
||||||
if knownNick != v.Nick.Text { // user changed nickname, we don't care about that enough
|
if knownNick != v.Nick.Text { // user changed nickname, we don't care about that enough
|
||||||
log.Println("JitsiClient", j.server, j.room, "User changed nickname:", knownNick, v.Nick.Text)
|
log.Println("JitsiClient", j.server, j.room, "User changed nickname:", knownNick, v.Nick.Text)
|
||||||
j.users[v.X.Item.Jid] = v.Nick.Text
|
j.users[v.X.Item.Jid] = v.Nick.Text
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
} else { // new user
|
} 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
|
j.users[v.X.Item.Jid] = v.Nick.Text
|
||||||
nickZws := v.Nick.Text[:1] + "\u200B" + v.Nick.Text[1:]
|
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])
|
log.Println("JitsiClient", j.server, j.room, "User joined:", j.users[v.X.Item.Jid])
|
||||||
c.Write(ircMsg)
|
c.Write(ircMsg)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
@ -172,9 +189,13 @@ func (j *JitsiClient) Run(c *irc.Client, done chan bool) {
|
||||||
if v.X.Item.Jid != "" {
|
if v.X.Item.Jid != "" {
|
||||||
if knownNick, ok := j.users[v.X.Item.Jid]; ok {
|
if knownNick, ok := j.users[v.X.Item.Jid]; ok {
|
||||||
delete(j.users, v.X.Item.Jid)
|
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:]
|
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)
|
log.Println("JitsiClient", j.server, j.room, "User left:", knownNick)
|
||||||
c.Write(ircMsg)
|
c.Write(ircMsg)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
@ -198,11 +219,11 @@ func JitsiRunWrapper(c *irc.Client, done chan bool) {
|
||||||
}
|
}
|
||||||
|
|
||||||
j := JitsiClient{
|
j := JitsiClient{
|
||||||
nick: nickname,
|
nick: nickname,
|
||||||
ircChannel: args[0],
|
ircChannel: args[0],
|
||||||
server: args[1],
|
server: args[1],
|
||||||
room: args[2],
|
room: args[2],
|
||||||
}
|
}
|
||||||
|
|
||||||
go j.Run(c, jitsiDone[i])
|
go j.Run(c, jitsiDone[i])
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue