Добрый вечер.
Я создаю бот IRC, который отвечает, когда вы упоминаете его. Я хочу знать, как заставить его отвечать, когда кто-то на самом деле произносит его имя. Это то, что я имею до сих пор ($ match [3] — это сообщение, которое кто-то сказал на канале, и да, stripos, потому что я хочу, чтобы оно не чувствительно к регистру):
if (stripos($match[3], "ircBot") !== false) {
$isMentioned = true;
}else { $isMentioned = false; }
хотя в действительности это обнаруживает, произнес ли кто-то свое имя, это работает, только если он упоминается в самом начале сообщения, например:
Я хочу, чтобы он возвращал истину, если «ircBot» в любом месте внутри $ match [3], а не только в начале
Вы должны искать границы слов, чтобы избежать кого-то по имени MircBot
// using in_array
$isMentioned = in_array('ircbot', preg_split('/\s+/', mb_strtolower($match[3])));
// using regex word boundaries
$isMentioned = preg_match('/\b(ircBot)\b/i', $match[3]);
использование stristr
вместо
if (stristr($match[3], "ircBot") !== false) {
$isMentioned = true;
}else { $isMentioned = false; }
Я думаю, что ваша ошибка в другом месте, например построение $ match [3]. Это отлично работает:
$isMentioned = stripos('This is in the middle of ircBot the string','ircbot') !== false;
echo( $isMentioned ? 'Is Mentioned' : 'Sad ignored bot');