-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbot.js
147 lines (118 loc) · 6.13 KB
/
bot.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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
'use strict'
const BotClass = require('./BotClass')
const Telegraf = require('telegraf')
const Markup = require('telegraf/markup')
const Extra = require('telegraf/extra')
const conf = require('./conf')
const tgAPIkey = conf.API_KEY
const bot = new Telegraf(tgAPIkey)
const SearchC = new BotClass(`pallet_table.xlsx`)
// const ctx = {
// reply: (text) => {
// console.log(text)
// }
// }
async function botInit(ctx) {
try {
let fileCheck = await SearchC.fileExist()
if (!fileCheck) {
return ctx.replyWithMarkdown('Нет таблицы для работы. Скиньте файл в формате *xlsx* в чат и повторите команду */start*')
}
let fileCTdate = await SearchC.fileGetCTDate()
ctx.replyWithMarkdown(`Файл был залит: *${fileCTdate}*`)
let menu = await SearchC.makeMenu()
ctx.reply('Выберете поле для поиска в меню', Markup
.keyboard(menu)
.oneTime()
.resize()
.extra())
bot.hears(['Комментарии'], async ( ctx) =>{
SearchC.searchProductsWithComments()
let messageIterator = await SearchC.getResultMessageWithDelay()
while(messageIterator.isDone().done) {
let message = await messageIterator.next()
await ctx.replyWithMarkdown( message.value,
((message.resultEmpty) ? Markup.inlineKeyboard([
Markup.callbackButton(`Добавить комментарий к товару`, message.globalElIngex),
Markup.callbackButton(message.curMessageNumber + 'й результат из ' + message.allMessageCount, 'test', ),
], ).resize().extra(): ''))
}
})
bot.hears(menu, (ctx) =>{
let text = ctx.update.message.text
SearchC.setState(text)
ctx.replyWithMarkdown(`Понял! Отправьте текст для поиска по полю *${text}*`)
})
bot.inlineQuery('/(.*)/', ()=>{})
bot.on('inline_query', (ctx) => {
const result = []
// Explicit usage
ctx.telegram.answerInlineQuery(ctx.inlineQuery.id, result)
// Using context shortcut
ctx.answerInlineQuery(result)
})
bot.on('message', async (ctx) => {
let text = ctx.update.message.text
let state = SearchC.getState()
let GlobalIdFotCommentState = SearchC.getGlobalIdForComment()
if(GlobalIdFotCommentState){
let menu = await SearchC.makeMenu()
let commentAdded = await SearchC.addCommentToProductFromGlobalIndex(ctx)
if(commentAdded){
return ctx.reply('Комментарий успешно добавлен', Markup
.keyboard(menu)
.oneTime()
.resize()
.extra())
}
}else{
if(!state)
await ctx.replyWithMarkdown('Не указанно поле для поиска')
SearchC.search(text)
let messageIterator = SearchC.getResultMessageWithDelay()
while(messageIterator.isDone().done) {
let message = await messageIterator.next()
await ctx.replyWithMarkdown( message.value,
((message.resultEmpty) ? Markup.inlineKeyboard([
Markup.callbackButton(`Добавить комментарий к товару`, message.globalElIngex),
Markup.callbackButton(message.curMessageNumber + 'й результат из ' + message.allMessageCount, 'test', ),
], ).resize().extra(): ''))
}
}
})
bot.on('callback_query', (ctx) => {
let globalIndexElementOnTable = ctx.update.callback_query.data
let messageId = ctx.update.callback_query.message.message_id
SearchC.setGlobalIdForComment(globalIndexElementOnTable)
return ctx.replyWithMarkdown("*!!!ВНИМАНИЕ!!! следующее сообщение будет записано как комментарий к данному товару *", Extra.inReplyTo(messageId))
})
} catch (e) {
ctx.reply(`Err: ${e}`)
}
}
bot.help((ctx)=>{
ctx.replyWithMarkdown(`Бот ищет по таблицке товаров по выбранному полю.\n
Что бы обновить табличку для поиска скиньте файл в фотмате *LSX* в чат и дождитесь сообщения об успешном обновлении файла. \n
Что бы начать поиск выберите поле для поиска в меню и введите текст для поиска. \n
Для вывода истории обновления файла отправьте команду */info* \n
Что бы оставить комментарий к товару нажмите на кнопку под сообщением с результатом`)
})
bot.command('info',(ctx)=>{
ctx.replyWithMarkdown('Файл содержит лог обновления файла таблицы. *Когда* и *кем* был изменен')
ctx.replyWithDocument({
source: SearchC.getLogFilePath(),
filename: 'Лог изменений файла таблицы.txt'
})
})
bot.on('document', async (ctx) => {
if(ctx.update.message.document.mime_type != 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
return ctx.reply(`Не тот формат файла! Нужен *XLSX* файл`)
await SearchC.saveFile(ctx)
await SearchC.makeMenu()
let date = new Date()
await ctx.reply(`Файл успешно заменен / добавлен! дата замены / добавления *${date.toLocaleString()}*. Отправьте комманду /start`)
})
bot.start((ctx) => {
botInit(ctx)
})
bot.launch()