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/build-state.yml
|
||||||
.yarn/install-state.gz
|
.yarn/install-state.gz
|
||||||
.pnp.*
|
.pnp.*
|
||||||
config.json
|
config.json
|
||||||
|
channels.db
|
|
@ -1,15 +1,889 @@
|
||||||
{
|
{
|
||||||
"iem": {
|
|
||||||
"channel": "botstalk"
|
|
||||||
},
|
|
||||||
"ntfy": {
|
|
||||||
"enabled": true,
|
|
||||||
"server": "",
|
|
||||||
"topic": "",
|
|
||||||
"priority": 3
|
|
||||||
},
|
|
||||||
"discord": {
|
"discord": {
|
||||||
"enabled": true,
|
"token": "YOUR_TOKEN"
|
||||||
"webhook": ""
|
},
|
||||||
|
"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 config = require("./config.json");
|
||||||
const { client, xml } = require("@xmpp/client");
|
const { client, xml } = require("@xmpp/client");
|
||||||
const fetch = require("node-fetch");
|
const fetch = require("node-fetch");
|
||||||
const html = require("html-entities")
|
const html = require("html-entities")
|
||||||
const Discord = require("discord.js");
|
const Discord = require("discord.js");
|
||||||
var hook;
|
const sqlite3 = require("sqlite3").verbose();
|
||||||
if (config.discord.enabled) {
|
// Setup Discord
|
||||||
hook = new Discord.WebhookClient({ url: config.discord.webhook })
|
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;
|
var startup = true;
|
||||||
const channel = config.iem.channel
|
|
||||||
// Random funcs
|
// Random funcs
|
||||||
const parseProductID = function (product_id) {
|
const parseProductID = function (product_id) {
|
||||||
const [timestamp, station, wmo, pil] = product_id.split("-");
|
const [timestamp, station, wmo, pil] = product_id.split("-");
|
||||||
|
@ -35,8 +57,7 @@ const convertDate = function (date) {
|
||||||
|
|
||||||
const xmpp = client({
|
const xmpp = client({
|
||||||
service: "xmpp://conference.weather.im",
|
service: "xmpp://conference.weather.im",
|
||||||
domain: "weather.im",
|
domain: "weather.im"
|
||||||
resource: channel
|
|
||||||
});
|
});
|
||||||
|
|
||||||
//debug(xmpp, true);
|
//debug(xmpp, true);
|
||||||
|
@ -44,82 +65,80 @@ const xmpp = client({
|
||||||
xmpp.on("error", (err) => {
|
xmpp.on("error", (err) => {
|
||||||
console.log("ERROR")
|
console.log("ERROR")
|
||||||
console.error(err);
|
console.error(err);
|
||||||
xmpp.start().catch(console.error);
|
start();
|
||||||
});
|
});
|
||||||
|
|
||||||
xmpp.on("offline", () => {
|
xmpp.on("offline", () => {
|
||||||
console.log("offline");
|
console.log("offline");
|
||||||
|
start();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Simple echo bot example
|
|
||||||
xmpp.on("stanza", (stanza) => {
|
xmpp.on("stanza", (stanza) => {
|
||||||
|
// Stops spam from getting old messages
|
||||||
if (startup) return;
|
if (startup) return;
|
||||||
// Get new messages and log them, ignore old messages
|
// Get new messages and log them, ignore old messages
|
||||||
if (stanza.is("message") && stanza.attrs.type === "groupchat") {
|
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")) return; // No PID, ignore it
|
||||||
if (!stanza.getChild("x").attrs.product_id) return;
|
if (!stanza.getChild("x").attrs.product_id) return;
|
||||||
|
|
||||||
|
// Get body of message
|
||||||
const body = html.decode(stanza.getChildText("body"));
|
const body = html.decode(stanza.getChildText("body"));
|
||||||
// get product id from "x" tag
|
// get product id from "x" tag
|
||||||
const product_id = parseProductID(stanza.getChild("x").attrs.product_id);
|
const product_id = parseProductID(stanza.getChild("x").attrs.product_id);
|
||||||
|
// Check timestamp, if not within 3 minutes, ignore it
|
||||||
// Check timestamp, if not within 2 minutes, ignore it
|
|
||||||
const now = new Date();
|
const now = new Date();
|
||||||
const diff = (now - product_id.timestamp) / 1000 / 60;
|
const diff = (now - product_id.timestamp) / 1000 / 60;
|
||||||
if (diff > 3) return;
|
if (diff > 3) return;
|
||||||
|
let embed = {
|
||||||
// Handle NTFY
|
title: "New Alert",
|
||||||
if (config.ntfy.enabled) {
|
description: body,
|
||||||
ntfyBody = {
|
color: 0x00ff00,
|
||||||
"topic": config.ntfy.topic,
|
timestamp: product_id.timestamp,
|
||||||
"message": body,
|
footer: {
|
||||||
"title": "New Alert",
|
text: `Station: ${product_id.station} WMO: ${product_id.wmo} PIL: ${product_id.pil} Channel: ${fromChannel}`
|
||||||
"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)
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (stanza.getChild("x").attrs.twitter_media) {
|
||||||
// Handle Discord
|
embed.image = {
|
||||||
if (config.discord.enabled) {
|
url: stanza.getChild("x").attrs.twitter_media
|
||||||
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 = {
|
// Run through the database, and find all channels that are linked to the iem channel
|
||||||
url: stanza.getChild("x").attrs.twitter_media
|
db.all(`SELECT channelid, custommessage FROM channels WHERE iemchannel = ?`, [fromChannel], (err, rows) => {
|
||||||
}
|
if (err) {
|
||||||
|
console.error(err.message);
|
||||||
}
|
}
|
||||||
hook.send({
|
rows.forEach((row) => {
|
||||||
embeds: [embed]
|
const channel = discord.channels.cache.get(row.channelid);
|
||||||
|
if (!channel) return;
|
||||||
|
channel.send({ content: row.custommessage, embeds: [embed] });
|
||||||
});
|
});
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
xmpp.on("online", async (address) => {
|
xmpp.on("online", async (address) => {
|
||||||
// Makes itself available
|
// Start listening on all channels, (dont ban me funny man)
|
||||||
await xmpp.send(xml("presence", { to: `${channel}@conference.weather.im/${channel}` }));
|
// 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());
|
console.log("online as", address.toString());
|
||||||
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
startup = false;
|
startup = false;
|
||||||
}, 1000)
|
}, 1000)
|
||||||
|
@ -134,4 +153,161 @@ const start = () => {
|
||||||
}, 5000);
|
}, 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/client": "^0.13.1",
|
||||||
"@xmpp/debug": "^0.13.0",
|
"@xmpp/debug": "^0.13.0",
|
||||||
"discord.js": "^14.15.2",
|
"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