首页 > 解决方案 > 在带有 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 为空。(我已经做了测试以文本形式返回数据,但它没有返回任何内容)

一些帮助?拜托,我已经用这个两周了,在任何地方都找不到任何信息。

谢谢!

标签: phpbotstelegram

解决方案


我在寻找相同问题的解决方案时阅读了您的问题。我找到了方法,此代码当前有效

        // 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;

        }

我看到你的问题是几个月前的问题,但我希望它对你有帮助


推荐阅读