mcTelegramBot/bot.js
2019-02-08 18:35:08 +03:00

100 lines
3.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import Telegraf from 'telegraf'
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,
DEATH_TYPE_FIRE_TICK, DEATH_TYPE_SUFFOCATION, DEATH_TYPE_MELTING, DEATH_TYPE_LAVA, DEATH_TYPE_DROWNING,
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, 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)
.forEach(chatId => bot.telegram.sendMessage(chatId, text))
)
const getEntityDeathMessage = payload => {
switch (payload.deathType) {
case DEATH_TYPE_CONTACT:
return 'умер от соприкосновения'
case DEATH_TYPE_BLOCK_EXPLOSION:
return 'взорвался'
case DEATH_TYPE_ENTITY_ATTACK:
return 'умер от существа'
case DEATH_TYPE_ENTITY_SWEEP_ATTACK:
return 'умер от урона по области'
case DEATH_TYPE_PROJECTILE:
return 'застрелили'
case DEATH_TYPE_SUFFOCATION:
return 'сплющило'
case DEATH_TYPE_FALL:
return 'упал насмерть'
case DEATH_TYPE_FIRE:
return 'сгорел'
case DEATH_TYPE_FIRE_TICK:
return 'умер от ожогов'
case DEATH_TYPE_MELTING:
return 'замерз'
case DEATH_TYPE_LAVA:
return 'от лавы'
case DEATH_TYPE_DROWNING:
return 'утонул'
case DEATH_TYPE_ENTITY_EXPLOSION:
return 'взорван вместе с существом'
case DEATH_TYPE_VOID:
return 'упал в бездну'
case DEATH_TYPE_LIGHTNING:
return 'скончался от удара молнией'
case DEATH_TYPE_SUICIDE:
return 'совершил самоубийство'
case DEATH_TYPE_STARVATION:
return 'скончался от голода'
case DEATH_TYPE_POISON:
return 'умер от яда'
case DEATH_TYPE_MAGIC:
return 'умер от магии'
case DEATH_TYPE_FALLING_BLOCK:
return 'погиб под упавшим блоком'
case DEATH_TYPE_THORNS:
return 'умер от шипов'
case DEATH_TYPE_DRAGON_BREATH:
return 'убит драконом'
case DEATH_TYPE_CUSTOM:
return ''
case DEATH_TYPE_FLY_INTO_WALL:
return 'убил сибя ап стену'
case DEATH_TYPE_HOT_FLOOR:
return 'не увидел, что пол - магма'
case DEATH_TYPE_CRAMMING:
return ''
case DEATH_TYPE_DRYOUT:
return ''
}
}
const JOIN_NOTIFICATION_LIMIT = 60 * 60 // 1h
export const sendEvent = ({ type, ...payload }) => {
switch (type) {
case TYPE_JOIN:
getLastLogoutTime(payload.displayName)
.then(lastLogoutTime => lastLogoutTime < currentTime() - JOIN_NOTIFICATION_LIMIT &&
sendMessageToAll(`Игрок ${payload.displayName} присоединился!`))
break
case TYPE_QUIT:
saveLogout(payload.displayName)
break
case TYPE_DEATH:
sendMessageToAll(`Игрок ${payload.displayName} ${getEntityDeathMessage(payload)} :(`)
break
}
}