配布プラグインのアップデートチェック

Xanadu2875

Member
1月 4, 2018
36
14
8
24
プラグイン側でアップデートがあるかどうかチェックする機能の付け方。

onLoadまたはonEnable時にネット上にアップロードしているファイルにアクセスして、
そのプラグインのバージョンと比較します。

RuinPrayさんのプラグインを参考にしています。

PHP:
use pocketmine\utils\Utils;
use pocketmine\plugin\PluginBase;

class Foo extends PluginBase {
    public function onLoad() {
        $response = Utils::getURL("http://www.example.com/version.txt?" . time() . "mt_rand");    //プラグインのバージョンが記載されているファイルが置かれているURL。?とtime()とmt_rand()は後で解説

        if($response !== false) {    //接続できなかった場合はfalseを返すのでここで評価
            $response = str_replace("\n", "", $response);    //文字列の最後は改行されているのでそれを取り除く
          
            if($this->getDescription()->getVersion() !== $response) {    //plugin.ymlに記載されているバージョンと$responseを比較
              
                $message = "新しいバージョンがあります! ⇒" . $this->getDescription()->getWebsite();    //お知らせとplugin.ymlに記載されているwabsite欄のURLを表示
                $this->getServer()->getLogger()->notice($message);
            }
        }
    }
}
 
最後の編集:
  • Like
Reactions: aieuo and kurarin

Xanadu2875

Member
1月 4, 2018
36
14
8
24
私はファイルの置く場所をGitHubにしています。
やり方は(GitHubのアカウントを持っている前提)、
バージョン管理用のリポジトリを作り、そこに半角で最新のバージョンが一行だけ書かれた「プラグインの名前.txt」のファイルを置きます。プラグインの名前のところはどんな名前でもいいですが、わかりやすいように配布するプラグインの名前にしましょう。
キャプチャ.PNGキャプチャ1.PNG
作成出来たら、そのファイルをクリックすると先ほど書いたバージョンが表示されます。そこのページにあるRawというボタンを押し真っ白な画面にバージョンが書かれているページに飛びましょう。
キャプチャ2.PNG
そこのURLをコピーしてプラグインのUtile::getURL()に渡しましょう
キャプチャ4.PNG

サンプル
 

Xanadu2875

Member
1月 4, 2018
36
14
8
24
PHP:
$response = Utils::getURL("http://www.example.com/version.txt?" . time() . "mt_rand");    //プラグインのバージョンが記載されているファイルが置かれているURL。?とtime()とmt_rand()は後で解説
について

普通のgetURL()はキャッシュしてしまうので、GitHubでバージョンを変えてもプラグイン側には影響されない場合があるため、
「?" . time() . mt_rand」を使い毎度異なるパラメータを付与してあげてキャッシュしないようにしましょう。
わからない方はそのままURLの最後にこれをコピペしてもらっても構いません。
 
最後の編集:

Xanadu2875

Member
1月 4, 2018
36
14
8
24
関数化すると
PHP:
private function checkUpdata() : bool { return str_replace("\n", "",Utils::getURL("https://raw.githubusercontent.com/Xanadu2875/VersionManager/master/ImageLib.txt" . "?" . time() . mt_rand())) === $this->getDescription()->getVersion(); }
 

Xanadu2875

Member
1月 4, 2018
36
14
8
24
字が汚いのはペンタブの設定をミスっただけであって消して本人が暗合量産機だといことではない