Задать вопрос
@Sergey-Nag

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

Есть бот для оформления заказов. Все заказы приходят менеджерам в том-же боте.
Нужно сделать так, чтобы когда приходило сообщение о новом заказе, нажимая на кнопку "принять" у всех людей, получивших это сообщение, пропала эта кнопка и изменился статус.
Пример:
до нажатия
5c82a94bb5b09121935549.png
после нажатия
5c82a971ddba0000914802.png
  • Вопрос задан
  • 289 просмотров
Подписаться 2 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
john36allTa
@john36allTa
alien glow of a dirty mind
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
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы