Ogłoszenie

Zwiń
No announcement yet.

CzatGG - auto wykonywanie komend, jak zrobić?

Zwiń
Ten temat jest zamknięty
X
X
 
  • Filtr
  • Czas
  • Pokaż
Wyczyść wszystko
new posts

    CzatGG - auto wykonywanie komend, jak zrobić?

    interesuje mnie jak poprawnie wczytywać/ładować komendy - dobrze jakby same się nie wczytywaly tylko za pomocą czegoś co wczyta dany plik mogę mieć inne pliki nie związane z komendami w folderze, próbowałem include(); i require_once(); były w pliku bota ścieżka do pliku była komendy/komenda.php ale nie działa więc pytanie, jak poprawnie to zrobić? żeby komenda sama się wykonywała po wpisaniu na przykład:
    /help .
    są jakieś pomysły?

    #2
    od tego są fora poświęcone programowaniu php
    CzatGG: Kliknij!
    Moje GG: Kliknij!

    Komentarz


      #3
      Niby tak ale to forum GG do którego zadałem pytanie jak nie będzie odpowiedzi pomocnej to zadam na forum o php.

      Komentarz


        #4
        Najlepiej, gdy zrobisz sobie osobny folder z plikami komend, każda komenda w osobnym pliku.
        Później robisz tak:
        W pliku pull
        Kod php:
        <?php
        $wyrazy 
        explode(" "$HTTP_RAW_POST_DATA); //Rozbicie wiadomości na wyrazy
        $komenda str_replace("/"""strtolower($wyraz[0])); //Pierwszy wyraz, który jest nazwą komendy
        if ($HTTP_RAW_POST_DATA{0} == "/"
        include(
        "do_command.php"); //Wykonanie kodu z pliku wywołującego komendy
        //die(); Ewentualnie, jeśli chcesz po wykonaniu komendy zakończyć działanie skryptu.
        ?>
        W pliku do_command.php:
        Kod php:
        <?php
        if(file_exists("komendy/{$komenda}.php")){ //Sprawdzenie, czy plik istnieje
        include("komendy/{$komenda.php}"); //Wykonanie kodu komendy
        }else{
        die(
        "Komenda nie istnieje."); //Zabij, komenda nie istnieje
        }
        ?>
        Pisane na surowo
        Już niedługo...

        Komentarz


          #5
          mimo wszystko fora PHP są lepsze do tego typu zagadnień, a forum GG do zagadnień związanych z obsługą BotAPI

          Komentarz


            #6
            Dzięki, prosze znów o pomoc ;P ponad godzine myslę o co chodzi... i próbuje rozwiązać problem -- ciągle dostaje wiadomość "Komenda nie istnieje. " jak napisze znak / lub np /time,
            moje drzewko wyglada tak:

            root/GG/bot.php (pull)
            root/GG/do_command.php
            root/GG/komendy/time.php (tutaj
            ogolnie komendy)

            reszte komend mam podobnie jak time wykonana bo nie uzywam jeszcze bazy wiec plik wyglada tak:

            time.php

            Kod php:
             <?  
            $M = new MessageBuilder();
            switch($HTTP_RAW_POST_DATA){
            if (substr($komenda == "time")){ 
              $M->addText("jest godzina: " .date("H:i:s").);
            }

            }
            $M->reply();
            ?>
            co jest źle?
            wina po stronie serwera? (cba)

            Komentarz


              #7
              ale jeżeli zwraca Ci że komenda nie istnieje to nie wina kodu komendy
              CzatGG: Kliknij!
              Moje GG: Kliknij!

              Komentarz


                #8
                Po 1, na cholercie Ci switch i sprawdzenie w kodzie komendy, jesli juz jest sprawdzone w pliku do_command.php? A po 2.w moim skrypcie jest blad, w nazwie zmiennnej, nawet tego nie przeczytales przed skopiowaniem? Przy str_replace zamiast $wyraz powinno byc $wyrazy, wtedy powinno dzialac, w pliku komendy, nic juz nie sprawdzaj, wsadz tylko to, co komenda ma wykonac.
                Już niedługo...

                Komentarz


                  #9
                  switch ogólne z przykładu boty.gg.pl

                  Komentarz


                    #10
                    1. Gdzieś już podawałem kod na komendy w osobnych plikach na tym forum. Wystarczy odrobina logicznego myślenia aby podmienić nazwy zmiennych.

                    2. Jeżeli w folderze masz także inne pliki to możesz do nazw plików komend dodać przedrostek np cmd_* a wtedy
                    Kod php:
                    if(file_exists('folder/cmd_'.$cmd)) //coś tam coś tam

                    include('folder/cmd_'.$cmd); // itd.... 
                    3. Po kiego kija rozbijać kod na poszufladkowane pliki? Nie potrzebnie dodajemy kolejne zadanie dla serwera. Czat nie jest, aż takim rozbudowanym skryptem na takie potrzeby, a tym bardziej fragment odpowiadający za wczytanie komend.

                    Komentarz


                      #11
                      zrobiłem tak jak pisaliscie i myślę że wina leży po mojej stronie ale niewiem w jakim pliku ani co dokładnie,

                      *przeniosłem do_command.php do głównego pliku pull
                      *zmieniłem nazwy plików tak jak było napisane
                      *skasowalem z plików cmd switch

                      (plik pull)
                      bot.php
                      Kod php:
                      <?php
                      header
                      ('Content-Type: application/octet-stream'); 
                      if (!
                      preg_match('/91\.((197\.1[2-5])|(214\.23[6-9]))\.[0-9]{1,3}/'$_SERVER['REMOTE_ADDR'])) die(); 

                      ##Zalaczenie plikow##
                      require_once('MessageBuilder.php'); /* zalaczenie biblioteki */
                      require_once('PushConnection.php'); /* zalaczenie biblioteki */
                      ##**Zalaczenie bibliotek**##

                      $wyrazy explode(" "$HTTP_RAW_POST_DATA); //Rozbicie wiadomości na wyrazy 
                      $CMD str_replace("/"""strtolower($wyrazy[0])); //Pierwszy wyraz, który jest nazwą komendy 
                      if ($HTTP_RAW_POST_DATA{0} == "/")  
                      if(
                      file_exists('CMD/CMD_'.$CMD)){ //Sprawdzenie, czy plik istnieje 
                      include('CMD/CMD_'.$CMD); //Wykonanie kodu komendy 
                      }
                      else 

                      die(
                      "Blad, nie ma takiej cmd."); //Zabij, komenda nie istnieje 

                       
                      ?>
                      przykładowa komenda IP
                      Kod php:
                      <?
                      $M = new MessageBuilder();
                      $bot = "BotGG: \r\n===\r\n"; 
                      $IP = $_SERVER['REMOTE_ADDR'];
                       
                      if (substr($CMD == "IP")){  
                      $M->addText($bot ."Twój adres IP to: ". $IP); 
                      }

                      $M->reply();
                      ?>
                      komenda działa w 100% bynajmniej działała jak robiłem na samym case,break bez ładowania komend...
                      teraz mam ciągle odpowiedź
                      "Blad, nie ma takiej cmd." więc gdzie może być błąd ???, oczywiście jestem wdzięczny za każdą pomoc i za poświęcenie czasu.
                      Ostatnio edytowany przez xxINVISIBLExx; [ARG:4 UNDEFINED]. Powód: update komendy.

                      Komentarz


                        #12
                        Na początek, zmień to:
                        Kod php:
                        if(file_exists('CMD/CMD_'.$CMD)){ //Sprawdzenie, czy plik istnieje  
                        include('CMD/CMD_'.$CMD); //Wykonanie kodu komendy  

                        Na to:
                        Kod php:
                        if(file_exists('CMD/CMD_'.$CMD.'.php')){ //Sprawdzenie, czy plik istnieje  
                        include('CMD/CMD_'.$CMD.'.php'); //Wykonanie kodu komendy  

                        W końcu operujesz na plikach Hypertext Preprocessor
                        I pokaż drzewko,
                        Już niedługo...

                        Komentarz


                          #13
                          / / folder/katalog
                          * plik
                          () komentarz

                          /NumerBotaGG/
                          (skrypt pull)
                          *bot.php
                          *PushConnection.php *MessageBuilder.php
                          /NumerBotaGG/CMD/
                          *CMD_IP.php
                          *CMD_time.php
                          (i inne cmd)


                          teraz działa komenda /time ale inne nie dzialaja więc pokombinuje. dzięki za pomoc.

                          EDIT:

                          Kod php:
                          if (substr($CMD == "time" or $CMD == "data" or $CMD == "godz" or $CMD == "godzina")){ 
                          tak nie wywoluje CMD, substr() mi psuje całą komende (nie pokazuje).

                          EDIT2:

                          a więc: skasowałem substr z komend i teraz działają,

                          zmieniłem nazwy komend NA MAŁE bo jak miałem dla przykładu ($CMD =="IP") to jak się wpisało IP lub ip nie działało z małych działa na dwa sposoby, jak można zrobić multi wywołanie komendy? próbowałem:
                          Kod php:
                          if ($CMD == "cmd1" || $CMD == "cmd 2"){
                          ...

                          oraz
                          Kod php:
                          if ($CMD == "cmd1" or $CMD == "cmd 2"){
                          ...

                          wywołuje tylko pierwsza komendę.
                          Ostatnio edytowany przez xxINVISIBLExx; [ARG:4 UNDEFINED]. Powód: poprawka2

                          Komentarz


                            #14
                            Multi wywołanie, chcesz by wykonały się dwa pliki z kodem po wpisaniu jednej komendy?
                            OR i || to zupełnie to samo, pamiętaj, że $CMD zawiera tylko jeden wyraz(bez spacji)! więc komenda nie może być "cmd 2"
                            Już niedługo...

                            Komentarz


                              #15
                              chce jedną komendę ale żeby pare zapytań wywoływało np dla komendy czas,
                              /time
                              /czas
                              itd...
                              ##
                              wiem że or i || to to samo ale patrzyłem czy czasem to działa a to nie.
                              ##
                              jak moge zrobic pare znaków na jedną komendę? próbowałem tak:
                              Kod php:
                              $CMD str_replace("/""."""strtolower($wyrazy[0])); 
                              ale wywoływało tylko przez użycie /
                              a chciałbym żeby przy kropce też działało.
                              Ostatnio edytowany przez xxINVISIBLExx; [ARG:4 UNDEFINED]. Powód: Pytanie.

                              Komentarz

                              Pracuję...
                              X