質問編集履歴
1
コードを追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -5,6 +5,141 @@
|
|
5
5
|
|
6
6
|
### 実現したいこと
|
7
7
|
- [ ] ▲▲機能を動作するようにする
|
8
|
+
|
9
|
+
###コード
|
10
|
+
```
|
11
|
+
const { Client, Intents } = require('discord.js')
|
12
|
+
|
13
|
+
const Keyv = require('keyv')
|
14
|
+
|
15
|
+
const http = require('http');
|
16
|
+
http.createServer(function (req, res) {
|
17
|
+
res.write("online");
|
18
|
+
res.end();
|
19
|
+
}).listen(8080);
|
20
|
+
|
21
|
+
const db = new Keyv('sqlite://registerchannel.sqlite', {
|
22
|
+
table: 'registerchannel'
|
23
|
+
})
|
24
|
+
|
25
|
+
//intentsのoption
|
26
|
+
const option = {
|
27
|
+
intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES,Intents.FLAGS.GUILD_VOICE_STATES,Intents.FLAGS.GUILD_MEMBERS,Intents.FLAGS.GUILD_MESSAGE_REACTIONS],
|
28
|
+
partials: ['MESSAGE', 'CHANNEL', 'REACTION']
|
29
|
+
|
30
|
+
}
|
31
|
+
//client
|
32
|
+
const client = new Client(option)
|
33
|
+
|
34
|
+
client.login(process.env.token)
|
35
|
+
|
36
|
+
client.on('ready',() => {
|
37
|
+
console.log('Successfully login!')
|
38
|
+
})
|
39
|
+
|
40
|
+
setInterval(_ => client.user.setActivity({ name: `日本の災害を監視中|ver:2.1.1|ping:${client.ws.ping}ms` }), 30000);
|
41
|
+
|
42
|
+
const { WebSocket } = require('ws')
|
43
|
+
// WebSocket に接続して JSONをもらおう
|
44
|
+
const ws = new WebSocket('wss://api.p2pquake.net/v2/ws')
|
45
|
+
|
46
|
+
ws.onmessage = async (data) => {
|
47
|
+
// JSON化しちゃおう
|
48
|
+
const o = JSON.parse(data.data)
|
49
|
+
|
50
|
+
const scalesjp = {
|
51
|
+
"10": "1",
|
52
|
+
"20": "2",
|
53
|
+
"30": "3",
|
54
|
+
"40": "4",
|
55
|
+
"45": "5弱",
|
56
|
+
"50": "5強",
|
57
|
+
"55": "6弱",
|
58
|
+
"60": "6強",
|
59
|
+
"70": "7"
|
60
|
+
};
|
61
|
+
const scalesen = {
|
62
|
+
"10": "1",
|
63
|
+
"20": "2",
|
64
|
+
"30": "3",
|
65
|
+
"40": "4",
|
66
|
+
"45": "5-",
|
67
|
+
"50": "5+",
|
68
|
+
"55": "6-",
|
69
|
+
"60": "6+",
|
70
|
+
"70": "7"
|
71
|
+
};
|
72
|
+
const eewjp = {
|
73
|
+
"10": "地震速報",
|
74
|
+
"20": "地震速報",
|
75
|
+
"30": "地震速報",
|
76
|
+
"40": "緊急地震速報",
|
77
|
+
"45": "緊急地震速報",
|
78
|
+
"50": "緊急地震速報",
|
79
|
+
"55": "緊急地震速報",
|
80
|
+
"60": "緊急地震速報",
|
81
|
+
"70": "緊急地震速報"
|
82
|
+
};
|
83
|
+
const eewen = {
|
84
|
+
"10": "EarthquakeBulletin",
|
85
|
+
"20": "EarthquakeBulletin",
|
86
|
+
"30": "EarthquakeBulletin",
|
87
|
+
"40": "EarthquakeEarlyWarning",
|
88
|
+
"45": "EarthquakeEarlyWarning",
|
89
|
+
"50": "EarthquakeEarlyWarning",
|
90
|
+
"55": "EarthquakeEarlyWarning",
|
91
|
+
"60": "EarthquakeEarlyWarning",
|
92
|
+
"70": "EarthquakeEarlyWarning"
|
93
|
+
};
|
94
|
+
if(data.data)o = JSON.parse(data.data)
|
95
|
+
ws.on('message', async data => {
|
96
|
+
const o = JSON.parse(data.data)
|
97
|
+
if(o.code == 551){
|
98
|
+
let msindo = o.earthquake.maxScale
|
99
|
+
let atime = o.earthquake.time
|
100
|
+
let domesticTsunami = o.earthquake.domesticTsunami
|
101
|
+
let depth = o.earthquake.hypocenter.depth
|
102
|
+
let magunitude = o.earthquake.hypocenter.magnitude
|
103
|
+
let hyposentername = o.earthquake.hypocenter.name
|
104
|
+
let pointskazu = o.points.length
|
105
|
+
let register = await db.get('registerchannel')
|
106
|
+
register.forEach(ch => {
|
107
|
+
const embed = new MessageEmbed().setColor("YELLOW").setDescription(`${eewjp[`${o.earthquake.maxScale}`]}\n・地震が発生しました。落ち着いて行動してください。倒れやすい家具などからはなれてください。火の始末は、後にしてください。\n・最大震度${scalesjp[`${o.earthquake.maxScale}`]} | 深さ${o.earthquake.hypocenter.depth}km | M${o.earthquake.hypocenter.magnitude}| 震源地:${o.earthquake.hypocenter.name}\n\n${eewen[`${o.earthquake.maxScale}`]}\n・An earthquake has occurred. Please act calmly. Please get away from furniture that is easy to fall down. Please take care of the fire later.\n・MaximumSeismic${scalesen[`${o.earthquake.maxScale}`]} | Depth${o.earthquake.hypocenter.depth}km | M${o.earthquake.hypocenter.magnitude} | Epicenter:${o.earthquake.hypocenter.name} `);
|
108
|
+
client.channels.cache.get(ch).send({ embeds: [embed].catch(c => console.log(`${c.id}に送信できませんでした`))})
|
109
|
+
|
110
|
+
client.on('messageCreate',async (message) => {
|
111
|
+
const prefix = "!"
|
112
|
+
if (message.author.bot || message.channel.type === "dm") return;
|
113
|
+
if (message.content.indexOf(prefix) !== 0) return
|
114
|
+
const args = message.content.slice(prefix.length).trim().split(/ +/g);
|
115
|
+
const command = args.shift().toLowerCase();
|
116
|
+
if(command === "register"){
|
117
|
+
message.channel.send(`<#${message.channel.id}>を地震情報通知チャンネルに設定しています...`)
|
118
|
+
const channels = await db.get('registerchannel')
|
119
|
+
let set
|
120
|
+
let save
|
121
|
+
if(channels){
|
122
|
+
let roles = channels.join(',');
|
123
|
+
set =`${roles},${message.channel.id}`
|
124
|
+
}
|
125
|
+
else set = `${message.channel.id}`
|
126
|
+
save = set.split(',');
|
127
|
+
await db.set('registerchannel',save)
|
128
|
+
await message.channel.send('正常に完了しました。\n:warning: 一度設定してしまったチャンネルは登録を解除することができません。')
|
129
|
+
}
|
130
|
+
|
131
|
+
if(command === "send"){
|
132
|
+
let register = await db.get('registerchannel')
|
133
|
+
register.forEach(ch => {
|
134
|
+
client.channels.cache.get(ch).send('一斉送信テスト!')
|
135
|
+
})
|
136
|
+
}
|
137
|
+
})
|
138
|
+
})
|
139
|
+
}
|
140
|
+
})
|
141
|
+
}
|
142
|
+
```
|
8
143
|
|
9
144
|
### 発生している問題・エラーメッセージ
|
10
145
|
|