php - 在带有 PHP - 核心库的电报机器人中使用 getChatMember 的正确语法是什么?
问题描述
我希望我的英语是可以理解的。
我正在用 PHP 制作一个电报机器人。该机器人托管在 Web 服务器 (goDaddy) 上
该机器人工作,执行一个测试命令:TestCommand.php 它工作。回个消息就好了。
然后,执行另一个命令: OpenlistCommand.php 并且它可以工作,但是我的部分代码有问题。
命令功能: 创建一个 .txt 文件以供以后托管 instagram 用户名。工作!
该命令只能在群聊中使用,私下它会返回一条消息“我只能在群中打开列表”。 这一切都有效。
问题是,我需要该命令只能由组管理员激活。
我使用 getChatMember () 来获取状态(根据电报 API,应该有我需要的数据)但我认为我做的不对,因为我保存数据的变量为空。你能给我一些指导吗?谢谢
namespace Longman\TelegramBot\Commands\UserCommands;
use Longman\TelegramBot\Commands\UserCommand;
use Longman\TelegramBot\Request;
class OpenlistCommand extends UserCommand
{
protected $name = 'OpenList'; // Nombre de comando
protected $description = 'Habilita la inscripcion de los usuarios a la lista'; // Descripcion del comando
protected $usage = '/openlist'; // Uso del comando
protected $version = '1.0.0'; // Version del comando
//Funcion que ejecuta el Comando
public function execute ()
{
$message = $this->getMessage(); // Captura el objeto mensaje
$chatMember = $this->getChatMember(); // Deberia capturar el ChatMember
$chat_id = $message->getChat()->getId(); // Captura el Id del chat
$chatType = $message->getChat()->getType(); // tipo de chat private o group
$status = $chatMember->getStatus(); // Deberia guardar el Status del usuario
$data = [ // Setea los nuevos datos del mensaje
'chat_id' => $chat_id, // Setea la id del chat para enviar el mensaje a:
'text' => '', // Setea el mensaje a enviar
'chat_type' => $chatType, //private or group
];
//Esta en chat privado?
if ($chatType=='private')
{
$data ['text'] = 'Estamos en privado no puedo abrir lista';
return Request::sendMessage($data);
}
else
{
if ($status =='administrator')
{
$data ['text'] = 'Lista abierta';
$archivo = fopen("Lista.txt","a");
return Request::sendMessage($data);
}
else {
$data ['text'] = 'Tienes que ser administrador para abrir la lista';
return Request::sendMessage($data);
}
}
}
} //Fin clase
使用此代码,机器人可以正常运行,但无法识别出我是该组的管理员。它返回以下消息:“您必须是组管理员” 我的意思是,if 条件为假,这是因为 $ status 为空。(我已经做了测试以文本形式返回数据,但它没有返回任何内容)
一些帮助?拜托,我已经用这个两周了,在任何地方都找不到任何信息。
谢谢!
解决方案
我在寻找相同问题的解决方案时阅读了您的问题。我找到了方法,此代码当前有效
// check if channel admin
$member = Request::getChatMember([
'user_id' => $user_id,
'chat_id' => $chat_id
]);
if ($member->isOk()) {
$member_data = $member->getResult();
if($member_data->getStatus()) {
$status = $member_data->getStatus();
} else {
$status = "";
}
} else {
$status = '';
}
$isAdmin = false;
if($status === 'creator' || $status === 'administrator') {
$isAdmin = true;
}
我看到你的问题是几个月前的问题,但我希望它对你有帮助
推荐阅读
- python - python 3.x pyserial 与 arduino uno 通信(伺服控制)
- tensorflow - 张量板本地主机连接
- javascript - 如何检查一个对象是否是 JavaScript 中的常规对象
- javascript - 尽管有数组,但我无法从 JavaScript 中的数组中获取项目
- html - 隐藏其他框阴影的背景颜色
- ios - 为 Alamofire 请求的每个视图控制器分配自定义 ParameterEncoding
- d3.js - OBIEE 中的 D3 可折叠树实现
- bazel - 从 git_repository 规则获取 git 元数据
- python - Python Pandas 分组列
- python - 如何从对象中获取一条线?