level up fix
This commit is contained in:
98
bot.js
98
bot.js
@ -1,15 +1,10 @@
|
||||
import Telegraf from 'telegraf'
|
||||
import { saveChat, getChats, saveLogout, getLastLogoutTime } from './database'
|
||||
import { saveChat, getChats, saveLogout, getLastLogoutTime, saveKillCount, getKillCount } 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
|
||||
EVENT_TYPE_JOIN, EVENT_TYPE_DEATH, EVENT_TYPE_QUIT, EVENT_TYPE_PLAYER_LEVEL_CHANGE, EVENT_TYPE_PLAYER_KILLED_ENTITY
|
||||
} from './types'
|
||||
import { currentTime } from './utility'
|
||||
import { getEntityDeathMessage, getEntityName } from './ru'
|
||||
|
||||
const bot = new Telegraf('643297173:AAGuqfZx3GhiiARwvY7AtWTTFw1T-2FiwCM')
|
||||
|
||||
@ -21,79 +16,38 @@ const sendMessageToAll = text => getChats()
|
||||
.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
|
||||
const JOIN_NOTIFICATION_TIME_DELTA = 60 * 60 // 1h
|
||||
const LEVEL_NOFIFICATION_EACH_LEVELS = 5
|
||||
const KILL_NOTIFICATION_EACH_KILLS = 50
|
||||
|
||||
export const sendEvent = ({ type, ...payload }) => {
|
||||
switch (type) {
|
||||
case TYPE_JOIN:
|
||||
case EVENT_TYPE_JOIN:
|
||||
getLastLogoutTime(payload.displayName)
|
||||
.then(lastLogoutTime => lastLogoutTime < currentTime() - JOIN_NOTIFICATION_LIMIT &&
|
||||
.then(lastLogoutTime => lastLogoutTime < currentTime() - JOIN_NOTIFICATION_TIME_DELTA &&
|
||||
sendMessageToAll(`Игрок ${payload.displayName} присоединился!`))
|
||||
break
|
||||
case TYPE_QUIT:
|
||||
case EVENT_TYPE_QUIT:
|
||||
saveLogout(payload.displayName)
|
||||
break
|
||||
case TYPE_DEATH:
|
||||
case EVENT_TYPE_DEATH:
|
||||
sendMessageToAll(`Игрок ${payload.displayName} ${getEntityDeathMessage(payload)} :(`)
|
||||
break
|
||||
case EVENT_TYPE_PLAYER_LEVEL_CHANGE:
|
||||
const { newLevel } = payload
|
||||
if (newLevel % LEVEL_NOFIFICATION_EACH_LEVELS === 0) {
|
||||
sendMessageToAll(`Игрок ${payload.displayName} прокачался до уровня ${newLevel}!`)
|
||||
}
|
||||
break
|
||||
case EVENT_TYPE_PLAYER_KILLED_ENTITY:
|
||||
getKillCount(payload.displayName, payload.entityName)
|
||||
.then(killCount => {
|
||||
const newKillCount = killCount + 1
|
||||
saveKillCount(payload.displayName, payload.entityName, newKillCount)
|
||||
if (newKillCount % KILL_NOTIFICATION_EACH_KILLS === 0) {
|
||||
sendMessageToAll(`${getEntityName(payload)} повержен(а) игроком ${payload.displayName}. Он убил ещё ${KILL_NOTIFICATION_EACH_KILLS}! Всего: ${newKillCount}`)
|
||||
}
|
||||
})
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user