在Twitch.tv上针对Nghtbot的Custome API-PHP命令出现问题

时间:2015-11-01 05:01:33

标签: php api

<?php
    /*
        AUTHOR: The Wacky Viking
        FILE: quote.php

        ### INSTALLATION ###

        To use this api, you have to host it on a public webserver.
        This API will work off of ONE nightbot command, but it is recommended to split up. *See SUGGESTIONS

        1) Save the file someplace on the server. PS: You can rename "quote.php" to anything you want.
        2) Make sure the file has permission to read/write files
        3) To add the API to nightbot, add this command;

                !addcom !quote $(customapi https://HOST/PATH/quote.php?$(query)) 

            The above command will let ANY type of user use all of the Quotes commands.
        4) Run the Quote.php-file once from webbrowser.

        If you have not specified a filename in CONFIGURATION, it will default to "quotes.txt".
        If the program can't find the file, it will attempt to create it for you.

        ### USAGE ###

        !quote                       : Displays random quote
        !quote sel <INDEX>           : Displays specific quote with INDEX.

        !quote add <quote>           : Adds a new quote <quote> to the list. Suggested format "<quote>" - @<user>, <year/date/situation>

        !quote list                  : Provides a URL for you to see all the quotes and their INDEX
        !quote edit <INDEX> <quote>  :  Overwrites quote with INDEX. Edited quote will be <quote>.
        !quote rem <INDEX>           : Removes quote with INDEX. Fetch the index at 

        ### SUGGESTIONS ###

        I suggest having the administative commands(add, remove, edit) and the public RANDOM_QUOTE and LIST on two separate commands. 
        This is in order to prevent spamming new/dumb quotes, or griefers removing or editing quotes.

        Ex. !addcom !quotes -ul=mod/reg/owner $(customapi https://HOST/PATH/quote.php?ARG=$(query)) This url should work with all of the features trusted people.
            !addcom !quote $(costomapi https://HOST/PATH/quote.php) <-- Only displays random quote for regular users.

    */
    $GLOBALS['DEBUG'] = false; // Use this when you are testing, to get an output of which branch is acting, and which it is SUPPOSED to do.
    $GLOBALS['DEBUG_COMM'] = false; // Use this to get DEBUG output from 

    // CONFIGURATION 
    $filename = "quotes.txt"; // Name of the textfile to store Quotes in. Name it whatever you want.
        // Yes, this is all the config needed to run this API! =D Dynamic coding FTW!


    // - CHOOSE AVAILABLE FUNTIONALITY SERVER-SIDE
    $ALLOW_REMOVE = true; // If set to "false", you can only remove quotes directly in textfile.
    $ALLOW_EDIT = true; // If set to "false", you can only edit quotes directly in textfile.
    $ALLOW_LIST = true; // If set to "false", you can not list quotes. -- For server security.
    $ALLOW_ADD = true; // If set to "false", you can only add quotes directly in textfile.
    $ALLOW_SELECT = true; // If set to "false", you cannot select specific quote.

    $input = ValidateInput();
    $com = substr($input, 0, 4);

     // $URL = returnDir();

     // echo $URL;


    $quotes = array();


    // Script start
    ValidateFilename();
    Initialize();

    switch($com){
        case 'ADD ':
            if(!$GLOBALS['ALLOW_ADD']) exit("Error: Adding quotes is not enabled in config.");
            $com = substr($input, 0, 3); // TODO : Must add "(<id>) - " as prefix.
            $arg = substr($input, 4);
            if($GLOBALS['DEBUG_COMM']) echo "DEBUG: Current command: ADD(" . $com . ") ARG: " . $arg;

            quoteAdd($arg);
            break;
        case 'REM ':
            if(!$GLOBALS['ALLOW_REMOVE']) exit("Error: Removing quotes is not enabled in config.");
            $com = substr($input, 0, 3);
            $arg = substr($input, 4);
            if($GLOBALS['DEBUG_COMM']) echo "DEBUG: Current command: REM(" . $com . ") ARG: " . $arg;
            quoteRemove($arg);
            break;
        case 'EDIT':
        if(!$GLOBALS['ALLOW_EDIT']) exit("Error: Editing quotes is not enabled in config.");
            $com = substr($input, 0, 4);
            $arg = substr($input, 5);
            if($GLOBALS['DEBUG_COMM']) echo "DEBUG: Current command: EDIT(" . $com . ") ARG: " . $arg;
            quoteEdit($arg);
            break;
        case 'LIST':
            if(!$GLOBALS['ALLOW_LIST']) exit("Error: Adding is not enabled in config.");
            $com = substr($input, 0, 4);
            $arg = substr($input, 5);
            if($GLOBALS['DEBUG_COMM']) echo "DEBUG: Current command: LIST(" . $com . ") ARG: " . $arg; // No need to actually process arguments here. It will only provide a link to the quotes-list.
            quoteList();
            break;
        case 'SEL ':
            if(!$GLOBALS['ALLOW_SELECT']) exit("Error: Adding is not enabled in config.");
            $com = substr($input, 0, 3);
            $arg = substr($input, 4);
            if($GLOBALS['DEBUG_COMM']) echo "DEBUG: Current command: SELECT(" . $com . ") ARG: " . $arg;
            quoteSelect($arg);
            break;
        default:
            $com = $input;
            $arg = $com;
            if($GLOBALS['DEBUG_COMM']) echo "DEBUG: Current command: DEFAULT(" . $com . ") ARG: " . $arg; // Displays when no other command is given. In this case, outputs a random quote.
            RandomQuote();
            break;
    }
    UpdateSavefile();

    function quoteAdd($toAdd){ // Update this code to add to array instead of the file itself. Use UpdateSavefile
        $str = $toAdd;
        $cnt = count($GLOBALS['quotes']) + 1;
        $prefix = "(" . $cnt . ") - ";

        // New code, adds quote to Array, which in turn updates the savefile
        if(array_push($GLOBALS['quotes'], $prefix . $str . "\n")){
            echo "Quote added!";
        } else {
            echo "ERROR: Quote was not added!";
        }
    }
    function quoteRemove($id){ // TODO: Test this command properly.
        // TODO: Add this function
        // TODO: Make sure to refresh all INDEX-es in the textfile.
        // IDEA: Don't mess with the array. As the array loads in from file
        // every run, you can just find a way to remove one line of text
        // matching the INDEX($id) provided from the textfile.

        // Better idea: Remove from array, and replace the text-file with a looped through array
        $tmp = array();
        $toRemove = "(". $id . ") - ";
        $lines = $GLOBALS['quotes'];
        foreach($lines as &$value){
            if(strpos($value, $toRemove) !== false){
                if($GLOBALS['DEBUG']) echo "This branch should never be accessed.";
            } else {
                $toAdd = StripQuote($value);
                $cnt = (count($tmp)+1);
                $prefix = "(" . $cnt . ") - ";
                $output = $prefix . $toAdd;
                if(array_push($tmp, $output)){

                // TODO: Check if you need to strip item here and re-set the INDEX-tag.
                    if($GLOBALS['DEBUG']) echo "Added value to array...";
                }
            }
        }
        //$GLOBALS['quotes'] = array();

        $GLOBALS['quotes'] = $tmp; // Push items into the quotes array. Might need to strip them first.


    }
    function quoteList(){

        echo "Check out all the quotes here: " . $GLOBALS['URL'] . $GLOBALS['filename'];
    }
    function quoteSelect($id){
        echo StripQuote($GLOBALS['quotes'][$id-1]);
    }
    function quoteEdit($arg){
        // TODO: Have to explode this into to different variables. One for INDEX, one for QUOTE

        //echo $arg;
        $tmp = explode(" ", $arg, 2);

        $id = $tmp[0];
        $quote = $tmp[1] . "\n";
        echo "ID: " . $id . " - QUOTE: " . $quote;
        $output = "(" . $id . ") - " . $quote;
        $GLOBALS['quotes'][$id-1] = $output;
    }
    function RandomQuote(){

        if($GLOBALS['DEBUG']) echo "Selecting random quote...";
        $r = rand(0, count($GLOBALS['quotes'])-1);
        $current = $r + 1;
        //if($r <= 0) $r = 0; // Test this line
        $str = $GLOBALS['quotes'][$r];
        echo StripQuote($str);
    }
    function LoadQuotes(){
        if($GLOBALS['DEBUG']) echo "Loading in Quotes from savefile...";
        $file = fopen($GLOBALS['filename'], "r") or die('Unable to open "'. $GLOBALS['$filename'] .'". Make sure the file exists.'); // The file should always exist, as we create it if it don't every time we run the Initialize routine.

        while(! feof($file)){
            $str = fgets($file);
            if($str != "") {
                array_push($GLOBALS['quotes'], $str);
            }
        }
        fclose($file);
    }
    function StripQuote($toStrip){
        // Strips a quote of its "(1)" index tag.
        $start = strpos($toStrip, '"'); // Fetches the Index of the needle(here: ").
        return substr($toStrip, $start); // Removes the unesessary indexing.
    }
    function ValidateInput(){
        if($GLOBALS['DEBUG']) echo "Validating input...";
        if(isset($_GET['arg'])){
            if($GLOBALS['DEBUG']) echo "Input OK!";
            return $_GET['arg'];
        } else {
            return "Please specify 'arg' in URL.";
        }
    }
    function ValidateFilename(){
        // Check if filename is not empty. If it is, create a name.
        if($GLOBALS['DEBUG']) echo "Filename: " . $GLOBALS['filename'];

        if($GLOBALS['filename'] == ""){
            $GLOBALS['filename'] = "quotes.txt"; // <-- Default filename. Triggers if no custom filename is given.
        } 
    }
    function UpdateSavefile(){
        // TODO: Push array data into save file. This is the only function 
        // that should interact with the savefile!
        file_put_contents($GLOBALS['filename'], "");
        foreach($GLOBALS['quotes'] as &$value){
            if(file_put_contents($GLOBALS['filename'], $value, FILE_APPEND)){
                if($GLOBALS['DEBUG']) echo "Updating savefile...success!";
            } else {
                if($GLOBALS['DEBUG']) echo "Updating savefile...failed!";
            }
        }
    }
    function Initialize(){
        if($GLOBALS['DEBUG']) echo "Initializing Quotes API...";

        // Run this command every time the page loads
        // in order to check if "quotes.txt" exists.
        if(!file_exists($GLOBALS['filename'])){
            // Create file if not already exist.
            $GLOBALS['filename'] = fopen($GLOBALS['filename'], "w");
            if($GLOBALS['DEBUG']) echo "File did not exist. Created file...";
        }

        // Load quotes from file into the array.
        LoadQuotes();
    }
    function returnDir(){
        $input = $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
        $tmp = explode("/", $input);
        $output = "";
        foreach ($tmp as &$value) {
            if($value != $tmp[count($tmp)-1])
            $output = $output . $value . "/";
        }
        return $output;
    }
?>

我正在尝试使用nightbot的命令,这是bot twitch.tv的命令,并在命令中从用以下内容创建的网页中提取文本(也就是随机引用)我上面显示的PHP代码。我在命令中的$(customapi URL)使用此命令,其中脚本的网站URL位于此处。当我尝试发行!Quote ADD时,我收到消息

  

&#39; [API必须返回少于400个字符]&#39;。

0 个答案:

没有答案