Turned it into a discord bot :)
This commit is contained in:
parent
c1af1a7839
commit
62581c8c34
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -128,4 +128,5 @@ dist
|
|||
.yarn/build-state.yml
|
||||
.yarn/install-state.gz
|
||||
.pnp.*
|
||||
config.json
|
||||
config.json
|
||||
channels.db
|
|
@ -1,15 +1,889 @@
|
|||
{
|
||||
"iem": {
|
||||
"channel": "botstalk"
|
||||
},
|
||||
"ntfy": {
|
||||
"enabled": true,
|
||||
"server": "",
|
||||
"topic": "",
|
||||
"priority": 3
|
||||
},
|
||||
"discord": {
|
||||
"enabled": true,
|
||||
"webhook": ""
|
||||
"token": "YOUR_TOKEN"
|
||||
},
|
||||
"iem": {
|
||||
"channels": [
|
||||
{
|
||||
"jid": "ilnchat@conference.weather.im",
|
||||
"name": "ilnchat"
|
||||
},
|
||||
{
|
||||
"jid": "zhuchat@conference.weather.im",
|
||||
"name": "zhuchat"
|
||||
},
|
||||
{
|
||||
"jid": "rerchat@conference.weather.im",
|
||||
"name": "Record Event Reports (RER)"
|
||||
},
|
||||
{
|
||||
"jid": "ncrfcchat@conference.weather.im",
|
||||
"name": "ncrfcchat"
|
||||
},
|
||||
{
|
||||
"jid": "zmechat@conference.weather.im",
|
||||
"name": "zmechat"
|
||||
},
|
||||
{
|
||||
"jid": "ggwchat@conference.weather.im",
|
||||
"name": "ggwchat"
|
||||
},
|
||||
{
|
||||
"jid": "sewchat@conference.weather.im",
|
||||
"name": "sewchat"
|
||||
},
|
||||
{
|
||||
"jid": "ohxchat@conference.weather.im",
|
||||
"name": "ohxchat"
|
||||
},
|
||||
{
|
||||
"jid": "megchat@conference.weather.im",
|
||||
"name": "megchat"
|
||||
},
|
||||
{
|
||||
"jid": "mobchat@conference.weather.im",
|
||||
"name": "mobchat"
|
||||
},
|
||||
{
|
||||
"jid": "brochat@conference.weather.im",
|
||||
"name": "brochat"
|
||||
},
|
||||
{
|
||||
"jid": "mkx_madison_spotters@conference.weather.im",
|
||||
"name": "MKX madison storm spotters"
|
||||
},
|
||||
{
|
||||
"jid": "ddcchat@conference.weather.im",
|
||||
"name": "ddcchat"
|
||||
},
|
||||
{
|
||||
"jid": "zanchat@conference.weather.im",
|
||||
"name": "zanchat"
|
||||
},
|
||||
{
|
||||
"jid": "mflchat@conference.weather.im",
|
||||
"name": "mflchat"
|
||||
},
|
||||
{
|
||||
"jid": "michiganwxalerts@conference.weather.im",
|
||||
"name": "michiganwxalerts"
|
||||
},
|
||||
{
|
||||
"jid": "dvnchat@conference.weather.im",
|
||||
"name": "dvnchat"
|
||||
},
|
||||
{
|
||||
"jid": "gjtchat@conference.weather.im",
|
||||
"name": "gjtchat"
|
||||
},
|
||||
{
|
||||
"jid": "ztlchat@conference.weather.im",
|
||||
"name": "ztlchat"
|
||||
},
|
||||
{
|
||||
"jid": "skywarnstatewidechase@conference.weather.im",
|
||||
"name": "Skywarn Statewide Chase team"
|
||||
},
|
||||
{
|
||||
"jid": "lmkchat@conference.weather.im",
|
||||
"name": "lmkchat"
|
||||
},
|
||||
{
|
||||
"jid": "wws44fl@conference.weather.im",
|
||||
"name": "WWS Tampa Bay"
|
||||
},
|
||||
{
|
||||
"jid": "hatchat@conference.weather.im",
|
||||
"name": "hatchat"
|
||||
},
|
||||
{
|
||||
"jid": "fwdchat@conference.weather.im",
|
||||
"name": "fwdchat"
|
||||
},
|
||||
{
|
||||
"jid": "boichat@conference.weather.im",
|
||||
"name": "boichat"
|
||||
},
|
||||
{
|
||||
"jid": "crisfield-chat@conference.weather.im",
|
||||
"name": "crisfield-chat"
|
||||
},
|
||||
{
|
||||
"jid": "slcchat@conference.weather.im",
|
||||
"name": "slcchat"
|
||||
},
|
||||
{
|
||||
"jid": "zobchat@conference.weather.im",
|
||||
"name": "zobchat"
|
||||
},
|
||||
{
|
||||
"jid": "amachat@conference.weather.im",
|
||||
"name": "Amarillo, TX"
|
||||
},
|
||||
{
|
||||
"jid": "pqrchat@conference.weather.im",
|
||||
"name": "pqrchat"
|
||||
},
|
||||
{
|
||||
"jid": "gstweather@conference.weather.im",
|
||||
"name": "GST Weather"
|
||||
},
|
||||
{
|
||||
"jid": "tws_chat@conference.weather.im",
|
||||
"name": "tws_chat"
|
||||
},
|
||||
{
|
||||
"jid": "franklin_chat@conference.weather.im",
|
||||
"name": "Franklin VT Chatroom"
|
||||
},
|
||||
{
|
||||
"jid": "zidchat@conference.weather.im",
|
||||
"name": "zidchat"
|
||||
},
|
||||
{
|
||||
"jid": "cnrfcchat@conference.weather.im",
|
||||
"name": "cnrfcchat"
|
||||
},
|
||||
{
|
||||
"jid": "nhcchat@conference.weather.im",
|
||||
"name": "nhcchat"
|
||||
},
|
||||
{
|
||||
"jid": "mke-skywarn@conference.weather.im",
|
||||
"name": "MKE Skywarn"
|
||||
},
|
||||
{
|
||||
"jid": "tnwxdiscuss@conference.weather.im",
|
||||
"name": "TN Statewide Weather Discussion"
|
||||
},
|
||||
{
|
||||
"jid": "stochat@conference.weather.im",
|
||||
"name": "stochat"
|
||||
},
|
||||
{
|
||||
"jid": "jklchat@conference.weather.im",
|
||||
"name": "jklchat"
|
||||
},
|
||||
{
|
||||
"jid": "grrchat@conference.weather.im",
|
||||
"name": "grrchat"
|
||||
},
|
||||
{
|
||||
"jid": "hnxchat@conference.weather.im",
|
||||
"name": "hnxchat"
|
||||
},
|
||||
{
|
||||
"jid": "spcchat@conference.weather.im",
|
||||
"name": "Storm Prediction Center Chatroom"
|
||||
},
|
||||
{
|
||||
"jid": "lchchat@conference.weather.im",
|
||||
"name": "lchchat"
|
||||
},
|
||||
{
|
||||
"jid": "khws@conference.weather.im",
|
||||
"name": "Huffman Weather Service"
|
||||
},
|
||||
{
|
||||
"jid": "kcichat@conference.weather.im",
|
||||
"name": "kcichat"
|
||||
},
|
||||
{
|
||||
"jid": "zbwchat@conference.weather.im",
|
||||
"name": "zbwchat"
|
||||
},
|
||||
{
|
||||
"jid": "otxchat@conference.weather.im",
|
||||
"name": "otxchat"
|
||||
},
|
||||
{
|
||||
"jid": "kodster@conference.weather.im",
|
||||
"name": "kodster"
|
||||
},
|
||||
{
|
||||
"jid": "vefchat@conference.weather.im",
|
||||
"name": "vefchat"
|
||||
},
|
||||
{
|
||||
"jid": "pubchat@conference.weather.im",
|
||||
"name": "pubchat"
|
||||
},
|
||||
{
|
||||
"jid": "wxst@conference.weather.im",
|
||||
"name": "Nationwide Encoder Relay Program"
|
||||
},
|
||||
{
|
||||
"jid": "psrchat@conference.weather.im",
|
||||
"name": "psrchat"
|
||||
},
|
||||
{
|
||||
"jid": "sgxchat@conference.weather.im",
|
||||
"name": "sgxchat"
|
||||
},
|
||||
{
|
||||
"jid": "pbzchat@conference.weather.im",
|
||||
"name": "pbzchat"
|
||||
},
|
||||
{
|
||||
"jid": "reddit_weatherlab@conference.weather.im",
|
||||
"name": "reddit_weatherlab"
|
||||
},
|
||||
{
|
||||
"jid": "nalsw@conference.weather.im",
|
||||
"name": "nalsw"
|
||||
},
|
||||
{
|
||||
"jid": "ekachat@conference.weather.im",
|
||||
"name": "ekachat"
|
||||
},
|
||||
{
|
||||
"jid": "ilxchat@conference.weather.im",
|
||||
"name": "ilxchat"
|
||||
},
|
||||
{
|
||||
"jid": "jsjchat@conference.weather.im",
|
||||
"name": "jsjchat"
|
||||
},
|
||||
{
|
||||
"jid": "barnburnerwi@conference.weather.im",
|
||||
"name": "Barn Burner WI"
|
||||
},
|
||||
{
|
||||
"jid": "ohiostormspottersteamoss@conference.weather.im",
|
||||
"name": "Ohio storm Spotters Team oss"
|
||||
},
|
||||
{
|
||||
"jid": "mlbchat@conference.weather.im",
|
||||
"name": "mlbchat"
|
||||
},
|
||||
{
|
||||
"jid": "arxchat@conference.weather.im",
|
||||
"name": "arxchat"
|
||||
},
|
||||
{
|
||||
"jid": "ilmchat@conference.weather.im",
|
||||
"name": "ilmchat"
|
||||
},
|
||||
{
|
||||
"jid": "okxchat@conference.weather.im",
|
||||
"name": "okxchat"
|
||||
},
|
||||
{
|
||||
"jid": "botstalk@conference.weather.im",
|
||||
"name": "botstalk"
|
||||
},
|
||||
{
|
||||
"jid": "lknchat@conference.weather.im",
|
||||
"name": "lknchat"
|
||||
},
|
||||
{
|
||||
"jid": "siawx_chat@conference.weather.im",
|
||||
"name": "siawx_chat"
|
||||
},
|
||||
{
|
||||
"jid": "rahchat@conference.weather.im",
|
||||
"name": "rahchat"
|
||||
},
|
||||
{
|
||||
"jid": "afcchat@conference.weather.im",
|
||||
"name": "afcchat"
|
||||
},
|
||||
{
|
||||
"jid": "lotchat@conference.weather.im",
|
||||
"name": "lotchat"
|
||||
},
|
||||
{
|
||||
"jid": "n90@conference.weather.im",
|
||||
"name": "n90"
|
||||
},
|
||||
{
|
||||
"jid": "boxchat@conference.weather.im",
|
||||
"name": "boxchat"
|
||||
},
|
||||
{
|
||||
"jid": "znychat@conference.weather.im",
|
||||
"name": "znychat"
|
||||
},
|
||||
{
|
||||
"jid": "akqchat@conference.weather.im",
|
||||
"name": "akqchat"
|
||||
},
|
||||
{
|
||||
"jid": "nerfcchat@conference.weather.im",
|
||||
"name": "nerfcchat"
|
||||
},
|
||||
{
|
||||
"jid": "zkcchat@conference.weather.im",
|
||||
"name": "zkcchat"
|
||||
},
|
||||
{
|
||||
"jid": "bischat@conference.weather.im",
|
||||
"name": "bischat"
|
||||
},
|
||||
{
|
||||
"jid": "twcchat@conference.weather.im",
|
||||
"name": "twcchat"
|
||||
},
|
||||
{
|
||||
"jid": "lmrfcchat@conference.weather.im",
|
||||
"name": "lmrfcchat"
|
||||
},
|
||||
{
|
||||
"jid": "abrchat@conference.weather.im",
|
||||
"name": "abrchat"
|
||||
},
|
||||
{
|
||||
"jid": "mbrfcchat@conference.weather.im",
|
||||
"name": "mbrfcchat"
|
||||
},
|
||||
{
|
||||
"jid": "pihchat@conference.weather.im",
|
||||
"name": "pihchat"
|
||||
},
|
||||
{
|
||||
"jid": "zoachat@conference.weather.im",
|
||||
"name": "zoachat"
|
||||
},
|
||||
{
|
||||
"jid": "mtrchat@conference.weather.im",
|
||||
"name": "mtrchat"
|
||||
},
|
||||
{
|
||||
"jid": "sjuchat@conference.weather.im",
|
||||
"name": "sjuchat"
|
||||
},
|
||||
{
|
||||
"jid": "gidchat@conference.weather.im",
|
||||
"name": "gidchat"
|
||||
},
|
||||
{
|
||||
"jid": "zmpchat@conference.weather.im",
|
||||
"name": "zmpchat"
|
||||
},
|
||||
{
|
||||
"jid": "phichat@conference.weather.im",
|
||||
"name": "phichat"
|
||||
},
|
||||
{
|
||||
"jid": "pitchat@conference.weather.im",
|
||||
"name": "WWS Pittsburgh"
|
||||
},
|
||||
{
|
||||
"jid": "chschat@conference.weather.im",
|
||||
"name": "chschat"
|
||||
},
|
||||
{
|
||||
"jid": "ajkchat@conference.weather.im",
|
||||
"name": "ajkchat"
|
||||
},
|
||||
{
|
||||
"jid": "chachat@conference.weather.im",
|
||||
"name": "WWS Charlotte"
|
||||
},
|
||||
{
|
||||
"jid": "bmxchat@conference.weather.im",
|
||||
"name": "bmxchat"
|
||||
},
|
||||
{
|
||||
"jid": "lixchat@conference.weather.im",
|
||||
"name": "lixchat"
|
||||
},
|
||||
{
|
||||
"jid": "apxchat@conference.weather.im",
|
||||
"name": "apxchat"
|
||||
},
|
||||
{
|
||||
"jid": "hunchat@conference.weather.im",
|
||||
"name": "hunchat"
|
||||
},
|
||||
{
|
||||
"jid": "spcmobile2006@conference.weather.im",
|
||||
"name": "spcmobile2006"
|
||||
},
|
||||
{
|
||||
"jid": "zmachat@conference.weather.im",
|
||||
"name": "zmachat"
|
||||
},
|
||||
{
|
||||
"jid": "phl@conference.weather.im",
|
||||
"name": "PHL TRACON"
|
||||
},
|
||||
{
|
||||
"jid": "dtxchat@conference.weather.im",
|
||||
"name": "dtxchat"
|
||||
},
|
||||
{
|
||||
"jid": "wbkoweatherwatchers@conference.weather.im",
|
||||
"name": "wbkoweatherwatchers"
|
||||
},
|
||||
{
|
||||
"jid": "gumchat@conference.weather.im",
|
||||
"name": "gumchat"
|
||||
},
|
||||
{
|
||||
"jid": "gcwxchat@conference.weather.im",
|
||||
"name": "gcwxchat"
|
||||
},
|
||||
{
|
||||
"jid": "zzmkxchat@conference.weather.im",
|
||||
"name": "zzmkxchat"
|
||||
},
|
||||
{
|
||||
"jid": "dentcoeas@conference.weather.im",
|
||||
"name": "dentcoeas"
|
||||
},
|
||||
{
|
||||
"jid": "marfcchat@conference.weather.im",
|
||||
"name": "marfcchat"
|
||||
},
|
||||
{
|
||||
"jid": "easwtalk@conference.weather.im",
|
||||
"name": "easwtalk"
|
||||
},
|
||||
{
|
||||
"jid": "crpchat@conference.weather.im",
|
||||
"name": "crpchat"
|
||||
},
|
||||
{
|
||||
"jid": "gccc-nc-skywarn@conference.weather.im",
|
||||
"name": "GCCC NC Skywarn"
|
||||
},
|
||||
{
|
||||
"jid": "zjxchat@conference.weather.im",
|
||||
"name": "zjxchat"
|
||||
},
|
||||
{
|
||||
"jid": "shvchat@conference.weather.im",
|
||||
"name": "shvchat"
|
||||
},
|
||||
{
|
||||
"jid": "tbwchat@conference.weather.im",
|
||||
"name": "tbwchat"
|
||||
},
|
||||
{
|
||||
"jid": "cyschat@conference.weather.im",
|
||||
"name": "cyschat"
|
||||
},
|
||||
{
|
||||
"jid": "hfochat@conference.weather.im",
|
||||
"name": "hfochat"
|
||||
},
|
||||
{
|
||||
"jid": "dmxchat@conference.weather.im",
|
||||
"name": "Des Moines, IA"
|
||||
},
|
||||
{
|
||||
"jid": "mseas-weather-discussion@conference.weather.im",
|
||||
"name": "MSEAS-Weather-Discussion"
|
||||
},
|
||||
{
|
||||
"jid": "zsechat@conference.weather.im",
|
||||
"name": "zsechat"
|
||||
},
|
||||
{
|
||||
"jid": "revchat@conference.weather.im",
|
||||
"name": "revchat"
|
||||
},
|
||||
{
|
||||
"jid": "carchat@conference.weather.im",
|
||||
"name": "carchat"
|
||||
},
|
||||
{
|
||||
"jid": "msochat@conference.weather.im",
|
||||
"name": "msochat"
|
||||
},
|
||||
{
|
||||
"jid": "abc3340@conference.weather.im",
|
||||
"name": "abc3340"
|
||||
},
|
||||
{
|
||||
"jid": "keychat@conference.weather.im",
|
||||
"name": "keychat"
|
||||
},
|
||||
{
|
||||
"jid": "riwchat@conference.weather.im",
|
||||
"name": "riwchat"
|
||||
},
|
||||
{
|
||||
"jid": "awpwxchat@conference.weather.im",
|
||||
"name": "awpwxchat"
|
||||
},
|
||||
{
|
||||
"jid": "mhxchat@conference.weather.im",
|
||||
"name": "mhxchat"
|
||||
},
|
||||
{
|
||||
"jid": "caechat@conference.weather.im",
|
||||
"name": "caechat"
|
||||
},
|
||||
{
|
||||
"jid": "indchat@conference.weather.im",
|
||||
"name": "indchat"
|
||||
},
|
||||
{
|
||||
"jid": "dlhchat@conference.weather.im",
|
||||
"name": "dlhchat"
|
||||
},
|
||||
{
|
||||
"jid": "unrchat@conference.weather.im",
|
||||
"name": "unrchat"
|
||||
},
|
||||
{
|
||||
"jid": "wilchat@conference.weather.im",
|
||||
"name": "WWS Columbus/Wilmington"
|
||||
},
|
||||
{
|
||||
"jid": "okc_chatrooms@conference.weather.im",
|
||||
"name": "okc_chatrooms"
|
||||
},
|
||||
{
|
||||
"jid": "kdtxchat@conference.weather.im",
|
||||
"name": "kdtxchat"
|
||||
},
|
||||
{
|
||||
"jid": "zabchat@conference.weather.im",
|
||||
"name": "zabchat"
|
||||
},
|
||||
{
|
||||
"jid": "wnpchat@conference.weather.im",
|
||||
"name": "wnpchat"
|
||||
},
|
||||
{
|
||||
"jid": "zlcchat@conference.weather.im",
|
||||
"name": "zlcchat"
|
||||
},
|
||||
{
|
||||
"jid": "ffcchat@conference.weather.im",
|
||||
"name": "ffcchat"
|
||||
},
|
||||
{
|
||||
"jid": "epzchat@conference.weather.im",
|
||||
"name": "epzchat"
|
||||
},
|
||||
{
|
||||
"jid": "taechat@conference.weather.im",
|
||||
"name": "taechat"
|
||||
},
|
||||
{
|
||||
"jid": "fox6chat@conference.weather.im",
|
||||
"name": "fox6chat"
|
||||
},
|
||||
{
|
||||
"jid": "cbrfcchat@conference.weather.im",
|
||||
"name": "cbrfcchat"
|
||||
},
|
||||
{
|
||||
"jid": "wisconsin_storm_spotters@conference.weather.im",
|
||||
"name": "Wisconsin Storm Spotters"
|
||||
},
|
||||
{
|
||||
"jid": "tfxchat@conference.weather.im",
|
||||
"name": "tfxchat"
|
||||
},
|
||||
{
|
||||
"jid": "abqchat@conference.weather.im",
|
||||
"name": "abqchat"
|
||||
},
|
||||
{
|
||||
"jid": "nwrfcchat@conference.weather.im",
|
||||
"name": "nwrfcchat"
|
||||
},
|
||||
{
|
||||
"jid": "rlxchat@conference.weather.im",
|
||||
"name": "rlxchat"
|
||||
},
|
||||
{
|
||||
"jid": "ounchat@conference.weather.im",
|
||||
"name": "ounchat"
|
||||
},
|
||||
{
|
||||
"jid": "clechat@conference.weather.im",
|
||||
"name": "clechat"
|
||||
},
|
||||
{
|
||||
"jid": "loxchat@conference.weather.im",
|
||||
"name": "loxchat"
|
||||
},
|
||||
{
|
||||
"jid": "fsdchat@conference.weather.im",
|
||||
"name": "fsdchat"
|
||||
},
|
||||
{
|
||||
"jid": "bgmchat@conference.weather.im",
|
||||
"name": "bgmchat"
|
||||
},
|
||||
{
|
||||
"jid": "wgrfcchat@conference.weather.im",
|
||||
"name": "wgrfcchat"
|
||||
},
|
||||
{
|
||||
"jid": "ewxchat@conference.weather.im",
|
||||
"name": "ewxchat"
|
||||
},
|
||||
{
|
||||
"jid": "uswat@conference.weather.im",
|
||||
"name": "Uswat United States weather team"
|
||||
},
|
||||
{
|
||||
"jid": "iowawx@conference.weather.im",
|
||||
"name": "iowawx"
|
||||
},
|
||||
{
|
||||
"jid": "ohrfcchat@conference.weather.im",
|
||||
"name": "ohrfcchat"
|
||||
},
|
||||
{
|
||||
"jid": "serfcchat@conference.weather.im",
|
||||
"name": "serfcchat"
|
||||
},
|
||||
{
|
||||
"jid": "stichat@conference.weather.im",
|
||||
"name": "stichat"
|
||||
},
|
||||
{
|
||||
"jid": "zdvchat@conference.weather.im",
|
||||
"name": "zdvchat"
|
||||
},
|
||||
{
|
||||
"jid": "eaxchat@conference.weather.im",
|
||||
"name": "eaxchat"
|
||||
},
|
||||
{
|
||||
"jid": "iwxchat@conference.weather.im",
|
||||
"name": "iwxchat"
|
||||
},
|
||||
{
|
||||
"jid": "lubchat@conference.weather.im",
|
||||
"name": "lubchat"
|
||||
},
|
||||
{
|
||||
"jid": "whntweather@conference.weather.im",
|
||||
"name": "whntweather"
|
||||
},
|
||||
{
|
||||
"jid": "bufchat@conference.weather.im",
|
||||
"name": "bufchat"
|
||||
},
|
||||
{
|
||||
"jid": "pdtchat@conference.weather.im",
|
||||
"name": "pdtchat"
|
||||
},
|
||||
{
|
||||
"jid": "knsw@conference.weather.im",
|
||||
"name": "knsw"
|
||||
},
|
||||
{
|
||||
"jid": "mkxchat@conference.weather.im",
|
||||
"name": "mkxchat"
|
||||
},
|
||||
{
|
||||
"jid": "test@conference.weather.im",
|
||||
"name": "test"
|
||||
},
|
||||
{
|
||||
"jid": "abc3340skywatcher@conference.weather.im",
|
||||
"name": "abc3340skywatcher"
|
||||
},
|
||||
{
|
||||
"jid": "grbchat@conference.weather.im",
|
||||
"name": "grbchat"
|
||||
},
|
||||
{
|
||||
"jid": "topchat@conference.weather.im",
|
||||
"name": "topchat"
|
||||
},
|
||||
{
|
||||
"jid": "rnkchat@conference.weather.im",
|
||||
"name": "rnkchat"
|
||||
},
|
||||
{
|
||||
"jid": "lzkchat@conference.weather.im",
|
||||
"name": "lzkchat"
|
||||
},
|
||||
{
|
||||
"jid": "ctpchat@conference.weather.im",
|
||||
"name": "ctpchat"
|
||||
},
|
||||
{
|
||||
"jid": "gldchat@conference.weather.im",
|
||||
"name": "gldchat"
|
||||
},
|
||||
{
|
||||
"jid": "abrfcchat@conference.weather.im",
|
||||
"name": "abrfcchat"
|
||||
},
|
||||
{
|
||||
"jid": "byzchat@conference.weather.im",
|
||||
"name": "byzchat"
|
||||
},
|
||||
{
|
||||
"jid": "mpxchat@conference.weather.im",
|
||||
"name": "mpxchat"
|
||||
},
|
||||
{
|
||||
"jid": "zdcchat@conference.weather.im",
|
||||
"name": "zdcchat"
|
||||
},
|
||||
{
|
||||
"jid": "lsxchat@conference.weather.im",
|
||||
"name": "lsxchat"
|
||||
},
|
||||
{
|
||||
"jid": "pahchat@conference.weather.im",
|
||||
"name": "pahchat"
|
||||
},
|
||||
{
|
||||
"jid": "bouchat@conference.weather.im",
|
||||
"name": "Boulder, CO"
|
||||
},
|
||||
{
|
||||
"jid": "tsachat@conference.weather.im",
|
||||
"name": "tsachat"
|
||||
},
|
||||
{
|
||||
"jid": "bmxspotterchat@conference.weather.im",
|
||||
"name": "bmxspotterchat"
|
||||
},
|
||||
{
|
||||
"jid": "zfwchat@conference.weather.im",
|
||||
"name": "zfwchat"
|
||||
},
|
||||
{
|
||||
"jid": "zauchat@conference.weather.im",
|
||||
"name": "zauchat"
|
||||
},
|
||||
{
|
||||
"jid": "aprfcchat@conference.weather.im",
|
||||
"name": "aprfcchat"
|
||||
},
|
||||
{
|
||||
"jid": "wwsreport@conference.weather.im",
|
||||
"name": "WWS Report"
|
||||
},
|
||||
{
|
||||
"jid": "bmxalertchat@conference.weather.im",
|
||||
"name": "bmxalertchat"
|
||||
},
|
||||
{
|
||||
"jid": "mqtchat@conference.weather.im",
|
||||
"name": "mqtchat"
|
||||
},
|
||||
{
|
||||
"jid": "mafchat@conference.weather.im",
|
||||
"name": "mafchat"
|
||||
},
|
||||
{
|
||||
"jid": "mrxchat@conference.weather.im",
|
||||
"name": "mrxchat"
|
||||
},
|
||||
{
|
||||
"jid": "fgzchat@conference.weather.im",
|
||||
"name": "fgzchat"
|
||||
},
|
||||
{
|
||||
"jid": "twitter@conference.weather.im",
|
||||
"name": "twitter"
|
||||
},
|
||||
{
|
||||
"jid": "oaxchat@conference.weather.im",
|
||||
"name": "oaxchat"
|
||||
},
|
||||
{
|
||||
"jid": "btvchat@conference.weather.im",
|
||||
"name": "btvchat"
|
||||
},
|
||||
{
|
||||
"jid": "potomac_tracon@conference.weather.im",
|
||||
"name": "Potomac TRACON"
|
||||
},
|
||||
{
|
||||
"jid": "ictchat@conference.weather.im",
|
||||
"name": "ictchat"
|
||||
},
|
||||
{
|
||||
"jid": "mfrchat@conference.weather.im",
|
||||
"name": "mfrchat"
|
||||
},
|
||||
{
|
||||
"jid": "detroiteaschat@conference.weather.im",
|
||||
"name": "detroiteaschat"
|
||||
},
|
||||
{
|
||||
"jid": "hgxchat@conference.weather.im",
|
||||
"name": "hgxchat"
|
||||
},
|
||||
{
|
||||
"jid": "afgchat@conference.weather.im",
|
||||
"name": "afgchat"
|
||||
},
|
||||
{
|
||||
"jid": "sgfchat@conference.weather.im",
|
||||
"name": "sgfchat"
|
||||
},
|
||||
{
|
||||
"jid": "hawaii@conference.weather.im",
|
||||
"name": "Hawaii Weather"
|
||||
},
|
||||
{
|
||||
"jid": "cwest@conference.weather.im",
|
||||
"name": "CWEST"
|
||||
},
|
||||
{
|
||||
"jid": "zlachat@conference.weather.im",
|
||||
"name": "zlachat"
|
||||
},
|
||||
{
|
||||
"jid": "alychat@conference.weather.im",
|
||||
"name": "alychat"
|
||||
},
|
||||
{
|
||||
"jid": "sjtchat@conference.weather.im",
|
||||
"name": "sjtchat"
|
||||
},
|
||||
{
|
||||
"jid": "janchat@conference.weather.im",
|
||||
"name": "janchat"
|
||||
},
|
||||
{
|
||||
"jid": "gspchat@conference.weather.im",
|
||||
"name": "gspchat"
|
||||
},
|
||||
{
|
||||
"jid": "lwxchat@conference.weather.im",
|
||||
"name": "lwxchat"
|
||||
},
|
||||
{
|
||||
"jid": "gyxchat@conference.weather.im",
|
||||
"name": "gyxchat"
|
||||
},
|
||||
{
|
||||
"jid": "wpcchat@conference.weather.im",
|
||||
"name": "WPC Chatroom"
|
||||
},
|
||||
{
|
||||
"jid": "sweaseops1@conference.weather.im",
|
||||
"name": "sweaseops1"
|
||||
},
|
||||
{
|
||||
"jid": "scwx@conference.weather.im",
|
||||
"name": "South Carolina Weather"
|
||||
},
|
||||
{
|
||||
"jid": "lbfchat@conference.weather.im",
|
||||
"name": "lbfchat"
|
||||
},
|
||||
{
|
||||
"jid": "jaxchat@conference.weather.im",
|
||||
"name": "jaxchat"
|
||||
},
|
||||
{
|
||||
"jid": "nwsc@conference.weather.im",
|
||||
"name": "Nate's Weather Safety Center"
|
||||
},
|
||||
{
|
||||
"jid": "fgfchat@conference.weather.im",
|
||||
"name": "fgfchat"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
282
index.js
282
index.js
|
@ -1,14 +1,36 @@
|
|||
// Requires
|
||||
const config = require("./config.json");
|
||||
const { client, xml } = require("@xmpp/client");
|
||||
const fetch = require("node-fetch");
|
||||
const html = require("html-entities")
|
||||
const Discord = require("discord.js");
|
||||
var hook;
|
||||
if (config.discord.enabled) {
|
||||
hook = new Discord.WebhookClient({ url: config.discord.webhook })
|
||||
}
|
||||
const sqlite3 = require("sqlite3").verbose();
|
||||
// Setup Discord
|
||||
const discord = new Discord.Client({
|
||||
intents: [
|
||||
"Guilds"
|
||||
]
|
||||
});
|
||||
const {
|
||||
REST,
|
||||
Routes
|
||||
} = require('discord.js');
|
||||
const rest = new REST({
|
||||
version: '10'
|
||||
}).setToken(config.discord.token);
|
||||
|
||||
// Setup SQlite DB
|
||||
const db = new sqlite3.Database("channels.db", (err) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
}
|
||||
console.log("Connected to the channels database.");
|
||||
// Create tables if they dont exist
|
||||
db.run(`CREATE TABLE IF NOT EXISTS channels (channelid TEXT, iemchannel TEXT, custommessage TEXT)`);
|
||||
});
|
||||
|
||||
// Setup stuff
|
||||
var startup = true;
|
||||
const channel = config.iem.channel
|
||||
// Random funcs
|
||||
const parseProductID = function (product_id) {
|
||||
const [timestamp, station, wmo, pil] = product_id.split("-");
|
||||
|
@ -35,8 +57,7 @@ const convertDate = function (date) {
|
|||
|
||||
const xmpp = client({
|
||||
service: "xmpp://conference.weather.im",
|
||||
domain: "weather.im",
|
||||
resource: channel
|
||||
domain: "weather.im"
|
||||
});
|
||||
|
||||
//debug(xmpp, true);
|
||||
|
@ -44,82 +65,80 @@ const xmpp = client({
|
|||
xmpp.on("error", (err) => {
|
||||
console.log("ERROR")
|
||||
console.error(err);
|
||||
xmpp.start().catch(console.error);
|
||||
start();
|
||||
});
|
||||
|
||||
xmpp.on("offline", () => {
|
||||
console.log("offline");
|
||||
start();
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
// Simple echo bot example
|
||||
xmpp.on("stanza", (stanza) => {
|
||||
// Stops spam from getting old messages
|
||||
if (startup) return;
|
||||
// Get new messages and log them, ignore old messages
|
||||
if (stanza.is("message") && stanza.attrs.type === "groupchat") {
|
||||
// Get channel name
|
||||
fromChannel = stanza.attrs.from.split("@")[0];
|
||||
|
||||
// Ignores
|
||||
if (!stanza.getChild("x")) return; // No PID, ignore it
|
||||
if (!stanza.getChild("x").attrs.product_id) return;
|
||||
|
||||
// Get body of message
|
||||
const body = html.decode(stanza.getChildText("body"));
|
||||
// get product id from "x" tag
|
||||
const product_id = parseProductID(stanza.getChild("x").attrs.product_id);
|
||||
|
||||
// Check timestamp, if not within 2 minutes, ignore it
|
||||
// Check timestamp, if not within 3 minutes, ignore it
|
||||
const now = new Date();
|
||||
const diff = (now - product_id.timestamp) / 1000 / 60;
|
||||
if (diff > 3) return;
|
||||
|
||||
// Handle NTFY
|
||||
if (config.ntfy.enabled) {
|
||||
ntfyBody = {
|
||||
"topic": config.ntfy.topic,
|
||||
"message": body,
|
||||
"title": "New Alert",
|
||||
"priority": config.ntfy.priority,
|
||||
"tags": [`Station:${product_id.station}`, `WMO:${product_id.wmo}`, `PIL:${product_id.pil}`, `Channel:${channel}`],
|
||||
}
|
||||
|
||||
if (stanza.getChild("x").attrs.twitter_media) {
|
||||
ntfyBody.attach = stanza.getChild("x").attrs.twitter_media;
|
||||
}
|
||||
if (body) {
|
||||
fetch(config.ntfy.server, {
|
||||
method: 'POST',
|
||||
body: JSON.stringify(ntfyBody)
|
||||
})
|
||||
let embed = {
|
||||
title: "New Alert",
|
||||
description: body,
|
||||
color: 0x00ff00,
|
||||
timestamp: product_id.timestamp,
|
||||
footer: {
|
||||
text: `Station: ${product_id.station} WMO: ${product_id.wmo} PIL: ${product_id.pil} Channel: ${fromChannel}`
|
||||
}
|
||||
}
|
||||
|
||||
// Handle Discord
|
||||
if (config.discord.enabled) {
|
||||
let embed = {
|
||||
title: "New Alert",
|
||||
description: body,
|
||||
color: 0x00ff00,
|
||||
timestamp: product_id.timestamp,
|
||||
footer: {
|
||||
text: `Station: ${product_id.station} WMO: ${product_id.wmo} PIL: ${product_id.pil} Channel: ${channel}`
|
||||
}
|
||||
if (stanza.getChild("x").attrs.twitter_media) {
|
||||
embed.image = {
|
||||
url: stanza.getChild("x").attrs.twitter_media
|
||||
}
|
||||
if (stanza.getChild("x").attrs.twitter_media) {
|
||||
embed.image = {
|
||||
url: stanza.getChild("x").attrs.twitter_media
|
||||
}
|
||||
}
|
||||
// Run through the database, and find all channels that are linked to the iem channel
|
||||
db.all(`SELECT channelid, custommessage FROM channels WHERE iemchannel = ?`, [fromChannel], (err, rows) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
}
|
||||
hook.send({
|
||||
embeds: [embed]
|
||||
rows.forEach((row) => {
|
||||
const channel = discord.channels.cache.get(row.channelid);
|
||||
if (!channel) return;
|
||||
channel.send({ content: row.custommessage, embeds: [embed] });
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
xmpp.on("online", async (address) => {
|
||||
// Makes itself available
|
||||
await xmpp.send(xml("presence", { to: `${channel}@conference.weather.im/${channel}` }));
|
||||
// Start listening on all channels, (dont ban me funny man)
|
||||
// for (const channel in config.iem.channels) {
|
||||
// console.log(`Joining ${channel.name}`)
|
||||
// await xmpp.send(xml("presence", { to: `${channel.jud}/${channel.name}` }));
|
||||
// }
|
||||
|
||||
// Join all channels
|
||||
config.iem.channels.forEach((channel => {
|
||||
console.log(`Joining ${channel.name}`)
|
||||
xmpp.send(xml("presence", { to: `${channel.jid}/${channel.jid.split("@")[0]}` }));
|
||||
}))
|
||||
|
||||
console.log("online as", address.toString());
|
||||
|
||||
setTimeout(() => {
|
||||
startup = false;
|
||||
}, 1000)
|
||||
|
@ -134,4 +153,161 @@ const start = () => {
|
|||
}, 5000);
|
||||
});
|
||||
}
|
||||
start();
|
||||
|
||||
// END XMPP
|
||||
|
||||
// START DISCORD
|
||||
|
||||
discord.on('ready', async () => {
|
||||
console.log(`Logged in as ${discord.user.tag}!`);
|
||||
// Do slash command stuff
|
||||
const commands = [
|
||||
{
|
||||
"name": "subscribe",
|
||||
"description": "Subscribe to a weather.im room",
|
||||
"default_member_permissions": 0,
|
||||
"options": [
|
||||
{
|
||||
"name": "room",
|
||||
"description": "The room you want to subscribe to",
|
||||
"type": 3,
|
||||
"required": true,
|
||||
"autocomplete": false
|
||||
},
|
||||
{
|
||||
"name": "message",
|
||||
"description": "Custom message to send when alert is sent",
|
||||
"type": 3,
|
||||
"required": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "setmessage",
|
||||
"description": "Set a custom message for a room",
|
||||
"default_member_permissions": 0,
|
||||
"options": [
|
||||
{
|
||||
"name": "room",
|
||||
"description": "The room you want to set a message for",
|
||||
"type": 3,
|
||||
"required": true,
|
||||
"autocomplete": false
|
||||
},
|
||||
{
|
||||
"name": "message",
|
||||
"description": "Custom message to send when alert is sent",
|
||||
"type": 3,
|
||||
"required": true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "unsubscribe",
|
||||
"description": "Unsubscribe from a weather.im room",
|
||||
"default_member_permissions": 0,
|
||||
"options": [
|
||||
{
|
||||
"name": "room",
|
||||
"description": "The room you want to unsubscribe from",
|
||||
"type": 3,
|
||||
"required": true,
|
||||
"autocomplete": false
|
||||
},
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
"name": "list",
|
||||
"description": "List all subscribed rooms for this channel",
|
||||
"default_member_permissions": 0
|
||||
}
|
||||
];
|
||||
|
||||
await (async () => {
|
||||
try {
|
||||
//Global
|
||||
await rest.put(Routes.applicationCommands(discord.user.id), { body: commands })
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
}
|
||||
})();
|
||||
start();
|
||||
});
|
||||
|
||||
discord.on("interactionCreate", async (interaction) => {
|
||||
switch(interaction.type) {
|
||||
case Discord.InteractionType.ApplicationCommand:
|
||||
switch (interaction.commandName) {
|
||||
case "subscribe":
|
||||
room = interaction.options.getString("room");
|
||||
if (!config.iem.channels.find((channel) => channel.jid.split("@")[0] === room)) {
|
||||
interaction.reply({ content: "Invalid room", ephemeral: true });
|
||||
return;
|
||||
}
|
||||
message = interaction.options.getString("message") || null;
|
||||
db.run(`INSERT INTO channels (channelid, iemchannel, custommessage) VALUES (?, ?, ?)`, [interaction.channel.id, room, message], (err) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
interaction.reply({ content: "Failed to subscribe to room", ephemeral: true });
|
||||
} else {
|
||||
interaction.reply({ content: "Subscribed to room", ephemeral: true });
|
||||
}
|
||||
});
|
||||
break;
|
||||
case "unsubscribe":
|
||||
// Check that the room is valid
|
||||
room = interaction.options.getString("room");
|
||||
if (!config.iem.channels.find((channel) => channel.jid.split("@")[0] === room)) {
|
||||
interaction.reply({ content: "Invalid room", ephemeral: true });
|
||||
return;
|
||||
}
|
||||
db.run(`DELETE FROM channels WHERE channelid = ? AND iemchannel = ?`, [interaction.channel.id, room], (err) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
interaction.reply({ content: "Failed to unsubscribe from room", ephemeral: true });
|
||||
} else {
|
||||
interaction.reply({ content: "Unsubscribed from room", ephemeral: true });
|
||||
}
|
||||
});
|
||||
break;
|
||||
case "list":
|
||||
db.all(`SELECT iemchannel, custommessage FROM channels WHERE channelid = ?`, [interaction.channel.id], (err, rows) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
interaction.reply({ content: "Failed to list subscribed rooms", ephemeral: true });
|
||||
} else {
|
||||
let message = "";
|
||||
rows.forEach((row) => {
|
||||
message += `Room: \`${row.iemchannel}\` Custom Message: \`\`${row.custommessage}\`\`\n`;
|
||||
});
|
||||
if (message === "") {
|
||||
message = "No subscribed rooms";
|
||||
}
|
||||
interaction.reply({ content: message, ephemeral: true });
|
||||
}
|
||||
});
|
||||
break;
|
||||
case "setmessage":
|
||||
room = interaction.options.getString("room");
|
||||
if (!config.iem.channels.find((channel) => channel.jid.split("@")[0] === room)) {
|
||||
interaction.reply({ content: "Invalid room", ephemeral: true });
|
||||
return;
|
||||
}
|
||||
message = interaction.options.getString("message");
|
||||
db.run(`UPDATE channels SET custommessage = ? WHERE channelid = ? AND iemchannel = ?`, [message, interaction.channel.id, room], (err) => {
|
||||
if (err) {
|
||||
console.error(err.message);
|
||||
interaction.reply({ content: "Failed to set message", ephemeral: true });
|
||||
} else {
|
||||
interaction.reply({ content: "Set message", ephemeral: true });
|
||||
}
|
||||
});
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
});
|
||||
// Login to discord
|
||||
discord.login(config.discord.token);
|
2319
package-lock.json
generated
2319
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
@ -12,6 +12,8 @@
|
|||
"@xmpp/client": "^0.13.1",
|
||||
"@xmpp/debug": "^0.13.0",
|
||||
"discord.js": "^14.15.2",
|
||||
"html-entities": "^2.5.2"
|
||||
"html-entities": "^2.5.2",
|
||||
"sqlite3": "^5.1.7",
|
||||
"xml2json": "^0.12.0"
|
||||
}
|
||||
}
|
||||
|
|
231
xml2jsontmp.js
Normal file
231
xml2jsontmp.js
Normal file
|
@ -0,0 +1,231 @@
|
|||
// Leaving this here for future use
|
||||
const xml2json = require('xml2json');
|
||||
|
||||
const xml = `
|
||||
<root>
|
||||
<item jid="ilnchat@conference.weather.im" name="ilnchat" />
|
||||
<item jid="zhuchat@conference.weather.im" name="zhuchat" />
|
||||
<item jid="rerchat@conference.weather.im" name="Record Event Reports (RER)" />
|
||||
<item jid="ncrfcchat@conference.weather.im" name="ncrfcchat" />
|
||||
<item jid="zmechat@conference.weather.im" name="zmechat" />
|
||||
<item jid="ggwchat@conference.weather.im" name="ggwchat" />
|
||||
<item jid="sewchat@conference.weather.im" name="sewchat" />
|
||||
<item jid="ohxchat@conference.weather.im" name="ohxchat" />
|
||||
<item jid="megchat@conference.weather.im" name="megchat" />
|
||||
<item jid="mobchat@conference.weather.im" name="mobchat" />
|
||||
<item jid="brochat@conference.weather.im" name="brochat" />
|
||||
<item jid="mkx_madison_spotters@conference.weather.im" name="MKX madison storm spotters" />
|
||||
<item jid="ddcchat@conference.weather.im" name="ddcchat" />
|
||||
<item jid="zanchat@conference.weather.im" name="zanchat" />
|
||||
<item jid="mflchat@conference.weather.im" name="mflchat" />
|
||||
<item jid="michiganwxalerts@conference.weather.im" name="michiganwxalerts" />
|
||||
<item jid="dvnchat@conference.weather.im" name="dvnchat" />
|
||||
<item jid="gjtchat@conference.weather.im" name="gjtchat" />
|
||||
<item jid="ztlchat@conference.weather.im" name="ztlchat" />
|
||||
<item jid="skywarnstatewidechase@conference.weather.im" name="Skywarn Statewide Chase team" />
|
||||
<item jid="lmkchat@conference.weather.im" name="lmkchat" />
|
||||
<item jid="wws44fl@conference.weather.im" name="WWS Tampa Bay" />
|
||||
<item jid="hatchat@conference.weather.im" name="hatchat" />
|
||||
<item jid="fwdchat@conference.weather.im" name="fwdchat" />
|
||||
<item jid="boichat@conference.weather.im" name="boichat" />
|
||||
<item jid="crisfield-chat@conference.weather.im" name="crisfield-chat" />
|
||||
<item jid="slcchat@conference.weather.im" name="slcchat" />
|
||||
<item jid="zobchat@conference.weather.im" name="zobchat" />
|
||||
<item jid="amachat@conference.weather.im" name="Amarillo, TX" />
|
||||
<item jid="pqrchat@conference.weather.im" name="pqrchat" />
|
||||
<item jid="gstweather@conference.weather.im" name="GST Weather" />
|
||||
<item jid="tws_chat@conference.weather.im" name="tws_chat" />
|
||||
<item jid="franklin_chat@conference.weather.im" name="Franklin VT Chatroom" />
|
||||
<item jid="zidchat@conference.weather.im" name="zidchat" />
|
||||
<item jid="cnrfcchat@conference.weather.im" name="cnrfcchat" />
|
||||
<item jid="nhcchat@conference.weather.im" name="nhcchat" />
|
||||
<item jid="mke-skywarn@conference.weather.im" name="MKE Skywarn" />
|
||||
<item jid="tnwxdiscuss@conference.weather.im" name="TN Statewide Weather Discussion" />
|
||||
<item jid="stochat@conference.weather.im" name="stochat" />
|
||||
<item jid="jklchat@conference.weather.im" name="jklchat" />
|
||||
<item jid="grrchat@conference.weather.im" name="grrchat" />
|
||||
<item jid="hnxchat@conference.weather.im" name="hnxchat" />
|
||||
<item jid="spcchat@conference.weather.im" name="Storm Prediction Center Chatroom" />
|
||||
<item jid="lchchat@conference.weather.im" name="lchchat" />
|
||||
<item jid="khws@conference.weather.im" name="Huffman Weather Service" />
|
||||
<item jid="kcichat@conference.weather.im" name="kcichat" />
|
||||
<item jid="zbwchat@conference.weather.im" name="zbwchat" />
|
||||
<item jid="otxchat@conference.weather.im" name="otxchat" />
|
||||
<item jid="kodster@conference.weather.im" name="kodster" />
|
||||
<item jid="vefchat@conference.weather.im" name="vefchat" />
|
||||
<item jid="pubchat@conference.weather.im" name="pubchat" />
|
||||
<item jid="wxst@conference.weather.im" name="Nationwide Encoder Relay Program" />
|
||||
<item jid="psrchat@conference.weather.im" name="psrchat" />
|
||||
<item jid="sgxchat@conference.weather.im" name="sgxchat" />
|
||||
<item jid="pbzchat@conference.weather.im" name="pbzchat" />
|
||||
<item jid="reddit_weatherlab@conference.weather.im" name="reddit_weatherlab" />
|
||||
<item jid="nalsw@conference.weather.im" name="nalsw" />
|
||||
<item jid="ekachat@conference.weather.im" name="ekachat" />
|
||||
<item jid="ilxchat@conference.weather.im" name="ilxchat" />
|
||||
<item jid="jsjchat@conference.weather.im" name="jsjchat" />
|
||||
<item jid="barnburnerwi@conference.weather.im" name="Barn Burner WI" />
|
||||
<item jid="ohiostormspottersteamoss@conference.weather.im" name="Ohio storm Spotters Team oss" />
|
||||
<item jid="mlbchat@conference.weather.im" name="mlbchat" />
|
||||
<item jid="arxchat@conference.weather.im" name="arxchat" />
|
||||
<item jid="ilmchat@conference.weather.im" name="ilmchat" />
|
||||
<item jid="okxchat@conference.weather.im" name="okxchat" />
|
||||
<item jid="botstalk@conference.weather.im" name="botstalk" />
|
||||
<item jid="lknchat@conference.weather.im" name="lknchat" />
|
||||
<item jid="siawx_chat@conference.weather.im" name="siawx_chat" />
|
||||
<item jid="rahchat@conference.weather.im" name="rahchat" />
|
||||
<item jid="afcchat@conference.weather.im" name="afcchat" />
|
||||
<item jid="lotchat@conference.weather.im" name="lotchat" />
|
||||
<item jid="n90@conference.weather.im" name="n90" />
|
||||
<item jid="boxchat@conference.weather.im" name="boxchat" />
|
||||
<item jid="znychat@conference.weather.im" name="znychat" />
|
||||
<item jid="akqchat@conference.weather.im" name="akqchat" />
|
||||
<item jid="nerfcchat@conference.weather.im" name="nerfcchat" />
|
||||
<item jid="zkcchat@conference.weather.im" name="zkcchat" />
|
||||
<item jid="bischat@conference.weather.im" name="bischat" />
|
||||
<item jid="twcchat@conference.weather.im" name="twcchat" />
|
||||
<item jid="lmrfcchat@conference.weather.im" name="lmrfcchat" />
|
||||
<item jid="abrchat@conference.weather.im" name="abrchat" />
|
||||
<item jid="mbrfcchat@conference.weather.im" name="mbrfcchat" />
|
||||
<item jid="pihchat@conference.weather.im" name="pihchat" />
|
||||
<item jid="zoachat@conference.weather.im" name="zoachat" />
|
||||
<item jid="mtrchat@conference.weather.im" name="mtrchat" />
|
||||
<item jid="sjuchat@conference.weather.im" name="sjuchat" />
|
||||
<item jid="gidchat@conference.weather.im" name="gidchat" />
|
||||
<item jid="zmpchat@conference.weather.im" name="zmpchat" />
|
||||
<item jid="phichat@conference.weather.im" name="phichat" />
|
||||
<item jid="pitchat@conference.weather.im" name="WWS Pittsburgh" />
|
||||
<item jid="chschat@conference.weather.im" name="chschat" />
|
||||
<item jid="ajkchat@conference.weather.im" name="ajkchat" />
|
||||
<item jid="chachat@conference.weather.im" name="WWS Charlotte" />
|
||||
<item jid="bmxchat@conference.weather.im" name="bmxchat" />
|
||||
<item jid="lixchat@conference.weather.im" name="lixchat" />
|
||||
<item jid="apxchat@conference.weather.im" name="apxchat" />
|
||||
<item jid="hunchat@conference.weather.im" name="hunchat" />
|
||||
<item jid="spcmobile2006@conference.weather.im" name="spcmobile2006" />
|
||||
<item jid="zmachat@conference.weather.im" name="zmachat" />
|
||||
<item jid="phl@conference.weather.im" name="PHL TRACON" />
|
||||
<item jid="dtxchat@conference.weather.im" name="dtxchat" />
|
||||
<item jid="wbkoweatherwatchers@conference.weather.im" name="wbkoweatherwatchers" />
|
||||
<item jid="gumchat@conference.weather.im" name="gumchat" />
|
||||
<item jid="gcwxchat@conference.weather.im" name="gcwxchat" />
|
||||
<item jid="zzmkxchat@conference.weather.im" name="zzmkxchat" />
|
||||
<item jid="dentcoeas@conference.weather.im" name="dentcoeas" />
|
||||
<item jid="marfcchat@conference.weather.im" name="marfcchat" />
|
||||
<item jid="easwtalk@conference.weather.im" name="easwtalk" />
|
||||
<item jid="crpchat@conference.weather.im" name="crpchat" />
|
||||
<item jid="gccc-nc-skywarn@conference.weather.im" name="GCCC NC Skywarn" />
|
||||
<item jid="zjxchat@conference.weather.im" name="zjxchat" />
|
||||
<item jid="shvchat@conference.weather.im" name="shvchat" />
|
||||
<item jid="tbwchat@conference.weather.im" name="tbwchat" />
|
||||
<item jid="cyschat@conference.weather.im" name="cyschat" />
|
||||
<item jid="hfochat@conference.weather.im" name="hfochat" />
|
||||
<item jid="dmxchat@conference.weather.im" name="Des Moines, IA" />
|
||||
<item jid="mseas-weather-discussion@conference.weather.im" name="MSEAS-Weather-Discussion" />
|
||||
<item jid="zsechat@conference.weather.im" name="zsechat" />
|
||||
<item jid="revchat@conference.weather.im" name="revchat" />
|
||||
<item jid="carchat@conference.weather.im" name="carchat" />
|
||||
<item jid="msochat@conference.weather.im" name="msochat" />
|
||||
<item jid="abc3340@conference.weather.im" name="abc3340" />
|
||||
<item jid="keychat@conference.weather.im" name="keychat" />
|
||||
<item jid="riwchat@conference.weather.im" name="riwchat" />
|
||||
<item jid="awpwxchat@conference.weather.im" name="awpwxchat" />
|
||||
<item jid="mhxchat@conference.weather.im" name="mhxchat" />
|
||||
<item jid="caechat@conference.weather.im" name="caechat" />
|
||||
<item jid="indchat@conference.weather.im" name="indchat" />
|
||||
<item jid="dlhchat@conference.weather.im" name="dlhchat" />
|
||||
<item jid="unrchat@conference.weather.im" name="unrchat" />
|
||||
<item jid="wilchat@conference.weather.im" name="WWS Columbus/Wilmington" />
|
||||
<item jid="okc_chatrooms@conference.weather.im" name="okc_chatrooms" />
|
||||
<item jid="kdtxchat@conference.weather.im" name="kdtxchat" />
|
||||
<item jid="zabchat@conference.weather.im" name="zabchat" />
|
||||
<item jid="wnpchat@conference.weather.im" name="wnpchat" />
|
||||
<item jid="zlcchat@conference.weather.im" name="zlcchat" />
|
||||
<item jid="ffcchat@conference.weather.im" name="ffcchat" />
|
||||
<item jid="epzchat@conference.weather.im" name="epzchat" />
|
||||
<item jid="taechat@conference.weather.im" name="taechat" />
|
||||
<item jid="fox6chat@conference.weather.im" name="fox6chat" />
|
||||
<item jid="cbrfcchat@conference.weather.im" name="cbrfcchat" />
|
||||
<item jid="wisconsin_storm_spotters@conference.weather.im" name="Wisconsin Storm Spotters" />
|
||||
<item jid="tfxchat@conference.weather.im" name="tfxchat" />
|
||||
<item jid="abqchat@conference.weather.im" name="abqchat" />
|
||||
<item jid="nwrfcchat@conference.weather.im" name="nwrfcchat" />
|
||||
<item jid="rlxchat@conference.weather.im" name="rlxchat" />
|
||||
<item jid="ounchat@conference.weather.im" name="ounchat" />
|
||||
<item jid="clechat@conference.weather.im" name="clechat" />
|
||||
<item jid="loxchat@conference.weather.im" name="loxchat" />
|
||||
<item jid="fsdchat@conference.weather.im" name="fsdchat" />
|
||||
<item jid="bgmchat@conference.weather.im" name="bgmchat" />
|
||||
<item jid="wgrfcchat@conference.weather.im" name="wgrfcchat" />
|
||||
<item jid="ewxchat@conference.weather.im" name="ewxchat" />
|
||||
<item jid="uswat@conference.weather.im" name="Uswat United States weather team" />
|
||||
<item jid="iowawx@conference.weather.im" name="iowawx" />
|
||||
<item jid="ohrfcchat@conference.weather.im" name="ohrfcchat" />
|
||||
<item jid="serfcchat@conference.weather.im" name="serfcchat" />
|
||||
<item jid="stichat@conference.weather.im" name="stichat" />
|
||||
<item jid="zdvchat@conference.weather.im" name="zdvchat" />
|
||||
<item jid="eaxchat@conference.weather.im" name="eaxchat" />
|
||||
<item jid="iwxchat@conference.weather.im" name="iwxchat" />
|
||||
<item jid="lubchat@conference.weather.im" name="lubchat" />
|
||||
<item jid="whntweather@conference.weather.im" name="whntweather" />
|
||||
<item jid="bufchat@conference.weather.im" name="bufchat" />
|
||||
<item jid="pdtchat@conference.weather.im" name="pdtchat" />
|
||||
<item jid="knsw@conference.weather.im" name="knsw" />
|
||||
<item jid="mkxchat@conference.weather.im" name="mkxchat" />
|
||||
<item jid="test@conference.weather.im" name="test" />
|
||||
<item jid="abc3340skywatcher@conference.weather.im" name="abc3340skywatcher" />
|
||||
<item jid="grbchat@conference.weather.im" name="grbchat" />
|
||||
<item jid="topchat@conference.weather.im" name="topchat" />
|
||||
<item jid="rnkchat@conference.weather.im" name="rnkchat" />
|
||||
<item jid="lzkchat@conference.weather.im" name="lzkchat" />
|
||||
<item jid="ctpchat@conference.weather.im" name="ctpchat" />
|
||||
<item jid="gldchat@conference.weather.im" name="gldchat" />
|
||||
<item jid="abrfcchat@conference.weather.im" name="abrfcchat" />
|
||||
<item jid="byzchat@conference.weather.im" name="byzchat" />
|
||||
<item jid="mpxchat@conference.weather.im" name="mpxchat" />
|
||||
<item jid="zdcchat@conference.weather.im" name="zdcchat" />
|
||||
<item jid="lsxchat@conference.weather.im" name="lsxchat" />
|
||||
<item jid="pahchat@conference.weather.im" name="pahchat" />
|
||||
<item jid="bouchat@conference.weather.im" name="Boulder, CO" />
|
||||
<item jid="tsachat@conference.weather.im" name="tsachat" />
|
||||
<item jid="bmxspotterchat@conference.weather.im" name="bmxspotterchat" />
|
||||
<item jid="zfwchat@conference.weather.im" name="zfwchat" />
|
||||
<item jid="zauchat@conference.weather.im" name="zauchat" />
|
||||
<item jid="aprfcchat@conference.weather.im" name="aprfcchat" />
|
||||
<item jid="wwsreport@conference.weather.im" name="WWS Report" />
|
||||
<item jid="bmxalertchat@conference.weather.im" name="bmxalertchat" />
|
||||
<item jid="mqtchat@conference.weather.im" name="mqtchat" />
|
||||
<item jid="mafchat@conference.weather.im" name="mafchat" />
|
||||
<item jid="mrxchat@conference.weather.im" name="mrxchat" />
|
||||
<item jid="fgzchat@conference.weather.im" name="fgzchat" />
|
||||
<item jid="twitter@conference.weather.im" name="twitter" />
|
||||
<item jid="oaxchat@conference.weather.im" name="oaxchat" />
|
||||
<item jid="btvchat@conference.weather.im" name="btvchat" />
|
||||
<item jid="potomac_tracon@conference.weather.im" name="Potomac TRACON" />
|
||||
<item jid="ictchat@conference.weather.im" name="ictchat" />
|
||||
<item jid="mfrchat@conference.weather.im" name="mfrchat" />
|
||||
<item jid="detroiteaschat@conference.weather.im" name="detroiteaschat" />
|
||||
<item jid="hgxchat@conference.weather.im" name="hgxchat" />
|
||||
<item jid="afgchat@conference.weather.im" name="afgchat" />
|
||||
<item jid="sgfchat@conference.weather.im" name="sgfchat" />
|
||||
<item jid="hawaii@conference.weather.im" name="Hawaii Weather" />
|
||||
<item jid="cwest@conference.weather.im" name="CWEST" />
|
||||
<item jid="zlachat@conference.weather.im" name="zlachat" />
|
||||
<item jid="alychat@conference.weather.im" name="alychat" />
|
||||
<item jid="sjtchat@conference.weather.im" name="sjtchat" />
|
||||
<item jid="janchat@conference.weather.im" name="janchat" />
|
||||
<item jid="gspchat@conference.weather.im" name="gspchat" />
|
||||
<item jid="lwxchat@conference.weather.im" name="lwxchat" />
|
||||
<item jid="gyxchat@conference.weather.im" name="gyxchat" />
|
||||
<item jid="wpcchat@conference.weather.im" name="WPC Chatroom" />
|
||||
<item jid="sweaseops1@conference.weather.im" name="sweaseops1" />
|
||||
<item jid="scwx@conference.weather.im" name="South Carolina Weather" />
|
||||
<item jid="lbfchat@conference.weather.im" name="lbfchat" />
|
||||
<item jid="jaxchat@conference.weather.im" name="jaxchat" />
|
||||
<item jid="nwsc@conference.weather.im" name="Nate's Weather Safety Center" />
|
||||
<item jid="fgfchat@conference.weather.im" name="fgfchat" />
|
||||
</root>
|
||||
`;
|
||||
|
||||
const json = xml2json.toJson(xml, { object: true });
|
||||
|
||||
console.log(JSON.stringify(json, null, 2));
|
Loading…
Reference in a new issue