-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
81 lines (57 loc) · 2.65 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import { VK } from 'vk-io'
import { HearManager } from '@vk-io/hear'
import { Constraint } from './constraints'
const BOTBON_ID = 183202890
const vk = new VK({
token: process.env.TOKEN
})
const db = new Map() // { peerid: { used: [Number], [constraints] } }
const hearManager = new HearManager()
vk.updates.on('message_new', hearManager.middleware)
hearManager.hear('!peerid', async ctx => ctx.send(ctx.peerId))
hearManager.hear('!minesweep', async ctx => {
if (db.has(ctx.peerId)) return ctx.send('ща падажжи я ему въебу')
return ctx.send('/пин начать')
})
vk.updates.on('message_new', async ctx => {
if (ctx.senderId !== -BOTBON_ID) return
const regex1 = /🧨 Похоже чтобы остановить бомбу нужен четырёхзначный пинкод\.\n✨ Есть догадки, что: (.+)\./
const regex2 = /💢 Пинкод не подошёл, количество попыток стало меньше\.\n🔢 (.+)\n♥ До взрыва: (⚙+)/
const regexWin = /✔ Пинкод подошёл!/
if (regex1.test(ctx.text)) {
const constraintText = ctx.text.match(regex1)[1]
const constraint = new Constraint(constraintText)
const possible = Array(9000).fill(0)
.map((e, i) => i + 1000)
.filter(e => constraint.filter(e))
const attempt = possible[Math.floor(Math.random() * possible.length)]
db.set(ctx.peerId, {
used: [attempt],
constraints: [constraint]
})
return ctx.send(`/пин ${attempt} (ещё ${possible.length - 1} чисел)`)
} else if (regex2.test(ctx.text)) {
const match = ctx.text.match(regex2)
const constraintText = match[1]
const attempts = match[2].length
if (attempts === 1) return ctx.send('ну я хуй знает тогда')
const constraint = new Constraint(constraintText)
const dbObj = db.get(ctx.peerId)
dbObj.constraints.push(constraint)
let possible = Array(9000).fill(0)
.map((e, i) => i + 1000)
.filter(e => !dbObj.used.includes(e))
dbObj.constraints.forEach(constraint => {
possible = possible.filter(e => constraint.filter(e))
})
const attempt = possible[Math.floor(Math.random() * possible.length)]
if (!attempt) return ctx.send('я хз')
dbObj.used.push(attempt)
return ctx.send(`/пин ${attempt} (ещё ${possible.length - 1} чисел, есть ${dbObj.constraints.length} подсказок)`)
} else if (regexWin.test(ctx.text)) {
const dbObj = db.get(ctx.peerId)
db.delete(ctx.peerId)
return ctx.send(`GG за ${dbObj.used.length} попыток разъебал лол`)
}
})
vk.updates.start().catch(console.error)