defer func() {
if x := recover(); x != nil {
Syslog_.Printf("handleEventsforXMPP: run time panic: %v", x)
+ //FIXME: signal that xmpp bot has crashed
}
}()
for {
select {
- case pe := <-presence_events:
+ case pe, pe_still_open := <-presence_events:
+ if ! pe_still_open { break }
Debug_.Printf("handleEventsforXMPP<-presence_events: %T %+v", pe, pe)
switch pec := pe.(type) {
case xmpp.Stanza:
break
}
- case je := <-jabber_events:
+ case je, je_still_open := <-jabber_events:
+ if ! je_still_open { break }
Debug_.Printf("handleEventsforXMPP<-jabber_events: %T %+v", je, je)
simple_jid := removeJIDResource(je.JID)
jid_data, jid_in_map := botdata.realraum_jids_[simple_jid]
-
+
//send status if requested, even if user never changed any settings and thus is not in map
if last_status_msg != nil && je.StatusNow {
xmppout <- botdata.makeXMPPMessage(je.JID, last_status_msg, nil)
}
-
+
if jid_in_map {
//if R3OnlineOnlyWithRecapInfo, we want a status update when coming online
if last_status_msg != nil && ! jid_data.Online && je.Online && jid_data.Wants == R3OnlineOnlyWithRecapInfo {