49 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
| This file is part of Telegram Desktop,
 | |
| the official desktop application for the Telegram messaging service.
 | |
| 
 | |
| For license and copyright information please follow this link:
 | |
| https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
 | |
| */
 | |
| #include "chat_helpers/bot_command.h"
 | |
| 
 | |
| #include "data/data_channel.h"
 | |
| #include "data/data_chat.h"
 | |
| #include "data/data_peer.h"
 | |
| #include "data/data_user.h"
 | |
| #include "data/data_session.h"
 | |
| #include "history/history_item.h"
 | |
| 
 | |
| namespace Bot {
 | |
| 
 | |
| QString WrapCommandInChat(
 | |
| 		not_null<PeerData*> peer,
 | |
| 		const QString &command,
 | |
| 		const FullMsgId &context) {
 | |
| 	auto result = command;
 | |
| 	if (const auto item = peer->owner().message(context)) {
 | |
| 		if (const auto user = item->fromOriginal()->asUser()) {
 | |
| 			return WrapCommandInChat(peer, command, user);
 | |
| 		}
 | |
| 	}
 | |
| 	return result;
 | |
| }
 | |
| 
 | |
| QString WrapCommandInChat(
 | |
| 		not_null<PeerData*> peer,
 | |
| 		const QString &command,
 | |
| 		not_null<UserData*> bot) {
 | |
| 	if (!bot->isBot() || bot->username().isEmpty()) {
 | |
| 		return command;
 | |
| 	}
 | |
| 	const auto botStatus = peer->isChat()
 | |
| 		? peer->asChat()->botStatus
 | |
| 		: peer->isMegagroup()
 | |
| 		? peer->asChannel()->mgInfo->botStatus
 | |
| 		: -1;
 | |
| 	return ((command.indexOf('@') < 2) && (botStatus == 0 || botStatus == 2))
 | |
| 		? command + '@' + bot->username()
 | |
| 		: command;
 | |
| }
 | |
| 
 | |
| } // namespace Bot
 | 
