@Sergey-Nag

Как изменить одно сообщение в разных чатах Telegram bot?

Есть бот для оформления заказов. Все заказы приходят менеджерам в том-же боте.
Нужно сделать так, чтобы когда приходило сообщение о новом заказе, нажимая на кнопку "принять" у всех людей, получивших это сообщение, пропала эта кнопка и изменился статус.
Пример:
до нажатия
5c82a94bb5b09121935549.png
после нажатия
5c82a971ddba0000914802.png
  • Вопрос задан
  • 160 просмотров
Пригласить эксперта
Ответы на вопрос 1
john36allTa
@john36allTa
That`s calling Walker
chat_id как я понимаю один, поэтому храните message_id, пока кто то не возьмет заказ. Далее зовите editMessageText chat_id message_id и нужным text
upd...Если чаты разные, можно реализовать подобным способом:
var Offer = function(_chats, _task){
	this.sendedTo = [];
	this.user = '';
	this.task = _task;
	this.tMsg = `Заказ #${_task.id}\n${_task.info}\nСтоимость: ${_task.cost}`;
	for (chat of _chats){
		bot.sendMessage({
			chat_id: chat,
			text: this.tMsg,
			reply_markup: {
				text: 'беру',
				callback_data: _task.id
			}
		}).then((result)=>this.sendedTo.push({id: result.chat, msg: result.message_id}));
	}
}
bot.addUpdateListener((upd)=>{
	function offerComplete(chat, msg){
		bot.editMessageText({
			chat_id: chat.id,
			message_id: chat.msg,
			text: msg,
			reply_markup: null
		});
	}
	if ('callback_data_id' in upd){
		if (let offer = offers.find(i=>i.task.id === upd.data)){
			if (offer.user === '' || upd.time < offer.time){
				offer.user = upd.from.id;
				offer.time = upd.time;
				db.updateOfferInfo({telegramUserId: upd.from.id});
				let msg = `\nЗаказ принял: @${upd.from.username}`;
				if (/Заказ принял/i.test(offer.tMsg)) offer.tMsg=offer.tMsg.replace(/Заказ принял:\s@.*/i, msg);
				else offer.tMsg += msg; 
				for (chat of offer.sendedTo){
					offerComplete(chat, offer.tMsg);
				}
			}
			else {
				let chat = offer.sendedTo.find(i=>i.id === upd.chat);
				offerComplete(chat, offer.tMsg);
			}
		}
	}
});

var offers = [];
offers.push(new Offer([
		...chats_id
	],{
		info: "Some offer for sales",
		cost: 1000,
		id: id_from_db
	}));

очевидно, что реализация бота мне не известна, поэтому написал согласно api.telegram
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
TeamJet Москва
До 100 000 руб.
Breadhead Санкт-Петербург
от 120 000 до 160 000 руб.
от 130 000 до 150 000 руб.
19 окт. 2019, в 02:31
3500 руб./за проект
19 окт. 2019, в 01:07
60000 руб./за проект
18 окт. 2019, в 23:45
150000 руб./за проект