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: console.log({ payload }) sendMessageToAll(`Игрок ${payload.displayName} ${getEntityDeathMessage(payload)} :(`) break } }