first version, join and very basic death messages
This commit is contained in:
parent
cd361a3740
commit
ac91a5325c
3
.gitignore
vendored
3
.gitignore
vendored
@ -1 +1,2 @@
|
|||||||
node_modules
|
node_modules
|
||||||
|
bot.db
|
97
bot.js
Normal file
97
bot.js
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
import Telegraf from 'telegraf'
|
||||||
|
import { saveChat, getChats } 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
|
||||||
|
} from './types'
|
||||||
|
|
||||||
|
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 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 ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const sendEvent = ({ type, ...payload }) => {
|
||||||
|
switch (type) {
|
||||||
|
case TYPE_JOIN:
|
||||||
|
sendMessageToAll(`Игрок ${payload.displayName} присоединился!`)
|
||||||
|
break
|
||||||
|
case TYPE_DEATH:
|
||||||
|
console.log({ payload })
|
||||||
|
sendMessageToAll(`Игрок ${payload.displayName} ${getEntityDeathMessage(payload)}. Убийца: ${payload.killerName}`)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
32
database.js
Normal file
32
database.js
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
import sqlite from 'sqlite3'
|
||||||
|
|
||||||
|
const db = new sqlite.Database('bot.db')
|
||||||
|
db.run(
|
||||||
|
`CREATE TABLE IF NOT EXISTS chats (
|
||||||
|
chatId INTEGER,
|
||||||
|
UNIQUE(chatId)
|
||||||
|
)`)
|
||||||
|
|
||||||
|
export const saveChat = id => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
db.run(`INSERT OR IGNORE INTO chats (chatId) VALUES (?)`, [ id ], (err) => {
|
||||||
|
if (err) {
|
||||||
|
reject(err)
|
||||||
|
} else {
|
||||||
|
resolve({ id })
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getChats = () => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
db.all('SELECT * FROM chats', [], (err, rows) => {
|
||||||
|
if (err) {
|
||||||
|
reject(err)
|
||||||
|
} else {
|
||||||
|
resolve(rows)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
9
main.js
9
main.js
@ -1,10 +1,11 @@
|
|||||||
import Telegraf from 'telegraf'
|
|
||||||
import express from 'express'
|
import express from 'express'
|
||||||
|
import { sendEvent } from './bot'
|
||||||
|
|
||||||
const web = express()
|
const web = express()
|
||||||
const bot = new Telegraf('643297173:AAGuqfZx3GhiiARwvY7AtWTTFw1T-2FiwCM')
|
|
||||||
|
|
||||||
web.get('/', (req, res) => {
|
web.use(express.json())
|
||||||
bot.telegram.sendMessage('test')
|
web.post('/', (req, res) => {
|
||||||
|
sendEvent(req.body)
|
||||||
|
res.send({ ok: true })
|
||||||
})
|
})
|
||||||
web.listen(3000)
|
web.listen(3000)
|
||||||
|
603
package-lock.json
generated
603
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -22,6 +22,8 @@
|
|||||||
"@babel/node": "^7.2.2",
|
"@babel/node": "^7.2.2",
|
||||||
"@babel/preset-env": "^7.3.1",
|
"@babel/preset-env": "^7.3.1",
|
||||||
"express": "^4.16.4",
|
"express": "^4.16.4",
|
||||||
"telegraf": "^3.27.1"
|
"sqlite3": "^4.0.6",
|
||||||
|
"telegraf": "^3.27.1",
|
||||||
|
"translate": "^1.0.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
201
types.js
Normal file
201
types.js
Normal file
@ -0,0 +1,201 @@
|
|||||||
|
export const TYPE_JOIN = 'join'
|
||||||
|
export const TYPE_DEATH = 'death'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Damage caused when an entity contacts a block such as a Cactus.
|
||||||
|
* <p>
|
||||||
|
* Damage: 1 (Cactus)
|
||||||
|
*/
|
||||||
|
export const DEATH_TYPE_CONTACT = 'CONTACT'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Damage caused when an entity attacks another entity.
|
||||||
|
* <p>
|
||||||
|
* Damage: variable
|
||||||
|
*/
|
||||||
|
export const DEATH_TYPE_ENTITY_ATTACK = 'ENTITY_ATTACK'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Damage caused when an entity attacks another entity in a sweep attack.
|
||||||
|
* <p>
|
||||||
|
* Damage: variable
|
||||||
|
*/
|
||||||
|
export const DEATH_TYPE_ENTITY_SWEEP_ATTACK = 'ENTITY_SWEEP_ATTACK'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Damage caused when attacked by a projectile.
|
||||||
|
* <p>
|
||||||
|
* Damage: variable
|
||||||
|
*/
|
||||||
|
export const DEATH_TYPE_PROJECTILE = 'PROJECTILE'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Damage caused by being put in a block
|
||||||
|
* <p>
|
||||||
|
* Damage: 1
|
||||||
|
*/
|
||||||
|
export const DEATH_TYPE_SUFFOCATION = 'SUFFOCATION'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Damage caused when an entity falls a distance greater than 3 blocks
|
||||||
|
* <p>
|
||||||
|
* Damage: fall height - 3.0
|
||||||
|
*/
|
||||||
|
export const DEATH_TYPE_FALL = 'FALL'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Damage caused by direct exposure to fire
|
||||||
|
* <p>
|
||||||
|
* Damage: 1
|
||||||
|
*/
|
||||||
|
export const DEATH_TYPE_FIRE = 'FIRE'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Damage caused due to burns caused by fire
|
||||||
|
* <p>
|
||||||
|
* Damage: 1
|
||||||
|
*/
|
||||||
|
export const DEATH_TYPE_FIRE_TICK = 'FIRE_TICK'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Damage caused due to a snowman melting
|
||||||
|
* <p>
|
||||||
|
* Damage: 1
|
||||||
|
*/
|
||||||
|
export const DEATH_TYPE_MELTING = 'MELTING'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Damage caused by direct exposure to lava
|
||||||
|
* <p>
|
||||||
|
* Damage: 4
|
||||||
|
*/
|
||||||
|
export const DEATH_TYPE_LAVA = 'LAVA'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Damage caused by running out of air while in water
|
||||||
|
* <p>
|
||||||
|
* Damage: 2
|
||||||
|
*/
|
||||||
|
export const DEATH_TYPE_DROWNING = 'DROWNING'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Damage caused by being in the area when a block explodes.
|
||||||
|
* <p>
|
||||||
|
* Damage: variable
|
||||||
|
*/
|
||||||
|
export const DEATH_TYPE_BLOCK_EXPLOSION = 'BLOCK_EXPLOSION'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Damage caused by being in the area when an entity, such as a
|
||||||
|
* Creeper, explodes.
|
||||||
|
* <p>
|
||||||
|
* Damage: variable
|
||||||
|
*/
|
||||||
|
export const DEATH_TYPE_ENTITY_EXPLOSION = 'ENTITY_EXPLOSION'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Damage caused by falling into the void
|
||||||
|
* <p>
|
||||||
|
* Damage: 4 for players
|
||||||
|
*/
|
||||||
|
export const DEATH_TYPE_VOID = 'VOID'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Damage caused by being struck by lightning
|
||||||
|
* <p>
|
||||||
|
* Damage: 5
|
||||||
|
*/
|
||||||
|
export const DEATH_TYPE_LIGHTNING = 'LIGHTNING'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Damage caused by committing suicide using the command "/kill"
|
||||||
|
* <p>
|
||||||
|
* Damage: 1000
|
||||||
|
*/
|
||||||
|
export const DEATH_TYPE_SUICIDE = 'SUICIDE'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Damage caused by starving due to having an empty hunger bar
|
||||||
|
* <p>
|
||||||
|
* Damage: 1
|
||||||
|
*/
|
||||||
|
export const DEATH_TYPE_STARVATION = 'STARVATION'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Damage caused due to an ongoing poison effect
|
||||||
|
* <p>
|
||||||
|
* Damage: 1
|
||||||
|
*/
|
||||||
|
export const DEATH_TYPE_POISON = 'POISON'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Damage caused by being hit by a damage potion or spell
|
||||||
|
* <p>
|
||||||
|
* Damage: variable
|
||||||
|
*/
|
||||||
|
export const DEATH_TYPE_MAGIC = 'MAGIC'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Damage caused by Wither potion effect
|
||||||
|
*/
|
||||||
|
export const DEATH_TYPE_WITHER = 'WITHER'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Damage caused by being hit by a falling block which deals damage
|
||||||
|
* <p>
|
||||||
|
* <b>Note:</b> Not every block deals damage
|
||||||
|
* <p>
|
||||||
|
* Damage: variable
|
||||||
|
*/
|
||||||
|
export const DEATH_TYPE_FALLING_BLOCK = 'FALLING_BLOCK'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Damage caused in retaliation to another attack by the Thorns
|
||||||
|
* enchantment.
|
||||||
|
* <p>
|
||||||
|
* Damage: 1-4 (Thorns)
|
||||||
|
*/
|
||||||
|
export const DEATH_TYPE_THORNS = 'THORNS'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Damage caused by a dragon breathing fire.
|
||||||
|
* <p>
|
||||||
|
* Damage: variable
|
||||||
|
*/
|
||||||
|
export const DEATH_TYPE_DRAGON_BREATH = 'DRAGON_BREATH'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Custom damage.
|
||||||
|
* <p>
|
||||||
|
* Damage: variable
|
||||||
|
*/
|
||||||
|
export const DEATH_TYPE_CUSTOM = 'CUSTOM'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Damage caused when an entity runs into a wall.
|
||||||
|
* <p>
|
||||||
|
* Damage: variable
|
||||||
|
*/
|
||||||
|
export const DEATH_TYPE_FLY_INTO_WALL = 'FLY_INTO_WALL'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Damage caused when an entity steps on {@link Material#MAGMA_BLOCK}.
|
||||||
|
* <p>
|
||||||
|
* Damage: 1
|
||||||
|
*/
|
||||||
|
export const DEATH_TYPE_HOT_FLOOR = 'HOT_FLOOR'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Damage caused when an entity is colliding with too many entities due
|
||||||
|
* to the maxEntityCramming game rule.
|
||||||
|
* <p>
|
||||||
|
* Damage: 6
|
||||||
|
*/
|
||||||
|
export const DEATH_TYPE_CRAMMING = 'CRAMMING'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Damage caused when an entity that should be in water is not.
|
||||||
|
* <p>
|
||||||
|
* Damage: 1
|
||||||
|
*/
|
||||||
|
export const DEATH_TYPE_DRYOUT = 'DRYOUT'
|
Loading…
x
Reference in New Issue
Block a user