2017-01-26 1 views
1

내가 같은 것을 달성 싶어 (+ 함께/strpos 시작). 여러분이 상상할 수있는 것처럼, 저는 몇몇 텍스트 입력을 듣고 있습니다.preg_match를 가진 스위치 케이스

this is !say some text 

코드 : 나의 이해에서

$prefix = "!"; 
switch ($message->content) { 
    case preg_match("/[^.*]$prefix . 'say' (.*) /", $message->content): 
    _say($message); 
    break; 
} 

function _say($message) 
{ 
    $parts = explode("!say", $message->content); 
    return $message->channel->sendMessage(trim($parts[1]), true); 
} 

, 정규 표현식이 올바른지 (도 regexp-tester에 확인 지금은이 같은 문자열이 또한 case 유발한다는 문제에 직면하고있어).

substr으로 테스트되었지만 그렇게하지는 않습니다.

case substr($message->content, 0, 3) == $prefix . 'say' : 

내가 뭘 잘못하고 있니?

+0

질문은 오히려 함수 호출의 출력을 테스트 했습니까? '$ message-> content'가 기본적으로 맞다고 가정하고 있습니다. 디버깅은 프로그래밍의 열쇠입니다. – Xorifelse

+0

글쎄, 정확한 부분을 말하지만'! say' 다음의 모든 부분은 문자열의 위치에 관계없이 – DasSaffe

+0

아마도'substr ($ message-> content, 0, 3) == $ prefix를 사용해야합니다. 'preg_match()'대신 'say''를 사용하십시오. 이는 또한 더 긴 명령의 경우'switch' 문을 변경해야한다는 것을 의미합니다. 그러나 ... 당신은'{space} '의 첫 번째'strpos()'가 – Xorifelse

답변

1

명령은 명령이므로 바보짓을해서는 안됩니다. 그래서 정규식을 사용하는 대신 간단한 문자열 비교를 제안합니다.

$prefix = "!"; 

function _say($message){ 
    return $message->channel->sendMessage(trim($message), true); 
} 


if($message->content[0] == $prefix){ 
    if($p = strpos($message->content, ' ') !== false){ 
    $cmd = substr($message->content, 1, $p); 

    switch($cmd){ 
     case 'say': 
     _say(substr($message->content, $p)); 
     break; 
     default: 
     die('unknown command'); 
    } 

    } else { 
    die('empty cmd'); 
    } 
} else { 
    die('no command'); 
}