quit event, join event now fires only once in a while for the same player

This commit is contained in:
smsteel
2019-02-08 18:29:45 +03:00
parent a58e01f7e5
commit 387ee4cb43
5 changed files with 59 additions and 46 deletions

29
bot.js
View File

@ -1,5 +1,5 @@
import Telegraf from 'telegraf'
import { saveChat, getChats } from './database'
import { saveChat, getChats, saveLogout, getLastLogoutTime } from './database'
import {
TYPE_JOIN, TYPE_DEATH, DEATH_TYPE_CONTACT, DEATH_TYPE_BLOCK_EXPLOSION, DEATH_TYPE_ENTITY_ATTACK,
DEATH_TYPE_ENTITY_SWEEP_ATTACK, DEATH_TYPE_PROJECTILE, DEATH_TYPE_FALL, DEATH_TYPE_FIRE,
@ -7,23 +7,19 @@ import {
DEATH_TYPE_ENTITY_EXPLOSION, DEATH_TYPE_VOID, DEATH_TYPE_LIGHTNING, DEATH_TYPE_SUICIDE,
DEATH_TYPE_STARVATION, DEATH_TYPE_POISON, DEATH_TYPE_MAGIC, DEATH_TYPE_FALLING_BLOCK,
DEATH_TYPE_THORNS, DEATH_TYPE_DRAGON_BREATH, DEATH_TYPE_CUSTOM, DEATH_TYPE_HOT_FLOOR,
DEATH_TYPE_FLY_INTO_WALL, DEATH_TYPE_CRAMMING, DEATH_TYPE_DRYOUT
DEATH_TYPE_FLY_INTO_WALL, DEATH_TYPE_CRAMMING, DEATH_TYPE_DRYOUT, TYPE_QUIT
} from './types'
import { currentTime } from './utility'
const bot = new Telegraf('643297173:AAGuqfZx3GhiiARwvY7AtWTTFw1T-2FiwCM')
bot.start(({ message: { chat: { id } } }) => saveChat(id))
bot.launch()
const sendMessageToAll = text => {
getChats()
.then(chats => chats.map(({ chatId }) => chatId))
.then(chatIds => {
for (let id of chatIds) {
bot.telegram.sendMessage(id, text)
}
})
}
const sendMessageToAll = text => getChats()
.then(chats => chats.map(({ chatId }) => chatId)
.forEach(chatId => bot.telegram.sendMessage(chatId, text))
)
const getEntityDeathMessage = payload => {
switch (payload.deathType) {
@ -84,14 +80,21 @@ const getEntityDeathMessage = payload => {
}
}
const JOIN_NOTIFICATION_LIMIT = 60 * 60 // 1h
export const sendEvent = ({ type, ...payload }) => {
switch (type) {
case TYPE_JOIN:
sendMessageToAll(`Игрок ${payload.displayName} присоединился!`)
getLastLogoutTime(payload.displayName)
.then(lastLogoutTime => lastLogoutTime < currentTime() - JOIN_NOTIFICATION_LIMIT &&
sendMessageToAll(`Игрок ${payload.displayName} присоединился!`))
break
case TYPE_QUIT:
saveLogout(payload.displayName)
break
case TYPE_DEATH:
console.log({ payload })
sendMessageToAll(`Игрок ${payload.displayName} ${getEntityDeathMessage(payload)}. Убийца: ${payload.killerName}`)
sendMessageToAll(`Игрок ${payload.displayName} ${getEntityDeathMessage(payload)} :(`)
break
}
}