МиниГайд по плагину likeHuman /интеллектуальный автоответчик

Дополнения к OpenKore, расширяющиее её функциональность, называются плагинами.

Модератор: 4epT

b0tter
Энтузиаст
Сообщения: 67
Зарегистрирован: Вт ноя 14, 2006 10:33 am
Контактная информация:

МиниГайд по плагину likeHuman /интеллектуальный автоответчик

Сообщение b0tter »

Оригинал на английском языке находится здесь

Попробовал написать на основе этого некий мини-гайд :) Надеюсь это поможет начинающим боттерам снизить шанс бана.

Итак, плагин likeHuman-это плагин для расширения функции autoresponse. Он предназначен для ответов на различные сообщения при выполнении определенных условий. Условиями могут являться текст получаемого сообщения, количество получаемых сообщений определенного типа, а также нежелательные сообщения. Пологается, что это работает также с selfconditions. Также в плагине предусмотрена задержка, будто бы ответ печатается, которую можно изменить, отредактировав строку в Плагине. Для этого открываем в текстовом редакторе САМ плагин и находим следующую строку:

Код: Выделить всё

$likeArgs->{timeout} = (0.5 + rand(1)) + (length($answer) / $typeSpeed);
Чтобы изменить задержку, необходимо увеличить $typeSpeed.

Описание допустимых параметров Плагина:

Код: Выделить всё

likeHumanOn (0|1) Вырубает|Врубает Плагин
likeHumanInLockOnly (0|1) Врубает(1) ответы только на lockMap
likeHumanConsole (0|1)  Врубает(1) консольные сообщения
likeHumanIgnore <список имен, резделенных точкой с запятой, или регулярное выражение> Этих товарищей бот будет игнорить
likeHumanStopAfter <количество максимальных сообщений для одного игрока> После этого бот перестает отвечать
likeHumanRealIgnoreOn (0|1) Этот параметр включает игнор если достигнуто  likeHumanStopAfter или выполнено условие endings, после которого бот перестает "разговаривать" с игроком
-
Использования Плагина (это прописываем в config.txt):

Код: Выделить всё

 likeHuman {
    questions <предполагаемые сообщения, на которые бот будет отвечать, разделенные точкой с запятой или регулярное выражение>
    answers <ответы, разделенные точкой с запятой>
    onPub (0|1)            #отвечать в паблик-чат (1-да)
    distance <max> #максимальная дистанция, на которой бот будет отвечать на паблик-сообщения
    onSystem (0|1) #если это значение установлено в (1), бот будет проврять вопросы в системных сообщениях
    onGuild (0|1)   # если этот параметр задан (1), бот будет отвечать в гильд-чат
    onParty (0|1)  #если этот параметр задан (1), бот будет отвечать в пати-чат
    onPM (0|1)   #если этот параметр задан (1), бот будет отвечать на приваты
    chatCount <range> #сколько раз будем отвечать одному юзеру(КАК ИСПОЛЬЗОВАТЬ ЗАВИСИТ ОТ ВЕРСИИ ОПЕНКОРЫ)
    endings <список фраз, разделенных точкой с запятой как закончим разговор>
}
-
Теперь небольшой пример (прописываем в конфиг.тхт):

Код: Выделить всё

## like human
likeHumanOn 1

likeHumanIgnore /GM_/

likeHuman {
	questions /прив/;превед;хай;hi;hello
	answers прива;прив;здароф
	onPub 1
	onSystem 0
	onGuild 1
	onParty 1
	onPM 1
	chatCount <2
	endings
}

likeHuman {
questions дароф, хелоу
answers =);:);^^
onPub 1
onSystem 0
onGuild 1
onParty 1
onPM 1
chatCount 2
endings
}

likeHuman {
	questions / бот/;/ bot/
	answers сам ты бот :(;эээ;=(;O_o
	onPub 1
	onSystem 0
	onGuild 0
	onParty 0
	onPM 1
	chatCount <2
	endings задрал;отвали;пашол в жопу
}
Как это будет выглядить ? :wink:

Юзер: привет)
Бот: прива
Юзер:дароф
Бот: ^^
Юзер: привет
Юзер: дароф
Юзер: ты бот
Бот: сам ты бот
Юзер:привет
Юзер: ты бот!!!
Бот: пашол в жопу
Юзер: чозанах?
Бот больше ему не ответит
---------------------
Очень надеюсь что это буде кому-то полезно :Rose:
Последний раз редактировалось b0tter Вт дек 05, 2006 9:52 am, всего редактировалось 2 раза.
Open Your Mind. Use Open Source.
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse »

Отделил кучу Мусора. Попрошу попусту не флудить!
А так-же добавить недостающие части топика отсудова: viewtopic.php?t=1208
Ahilles666
Новичок
Сообщения: 14
Зарегистрирован: Ср янв 17, 2007 6:54 pm

Сообщение Ahilles666 »

Проблема стандартна : непашет... Версия коры 1.9.3 , плага 3.0.1.

В конфе :

######## like human ########

likeHumanOn 1
likeHumanConsole 0
likeHumanInLockOnly 1
likeHumanIgnore /GM_/
likeHumanStopAfter 10
likeHumanRealIgnore 1

likehuman {
questions /прив/;превед;хай;hi;hello
answers прива;прив;здароф
onPub 1
onSystem 0
onGuild 1
onParty 1
onPM 1
chatCount <2
endings
}

likeHuman {
questions / бот/;/ bot/
answers О_о,внатуре?);Да ты моск, всё ушла гмам сдаваться)));Плин а я незаметила);А ты уверен?;пнх;Сам ты бот;
onPub 1
onSystem 0
onGuild 0
onParty 0
onPM 1
chatCount <2
endings задрал;отвали;пашол в жопу
}

Остановился на написании этого - попробовал потестить-молчит...все варианты в теме пробовал-невыходит.
Если где то по нубски налажал-пните и ткните носом.
Аватара пользователя
miniBot
Грамотный
Сообщения: 429
Зарегистрирован: Вс ноя 05, 2006 8:48 am
Откуда: Москва
Контактная информация:

Сообщение miniBot »

чуть выше постом есть ссылка, на отстреляный мусор, почитай, и будет тебе счастье.
помощь только тем у кого включен параметр - mozgEnable 1

БОТАТЬ, БОТАТЬ, И ЕЩЕ РАЗ БОТАТЬ, КАК ЗАВЕЩАЛ ВЕЛИКИЙ ЛЕНИН
Jacob
Новичок
Сообщения: 7
Зарегистрирован: Сб фев 10, 2007 11:59 am

Сообщение Jacob »

Возникла проблема Misc.pm line 2054. при ответе лайкхумана
В поиске нашел ответы типа проблема решена, тема закрыта и т.п.
самое информативное:

Добавлено: Чт Фев 01, 2007 7:57 am Заголовок сообщения:

--------------------------------------------------------------------------------

Цитата:
--error----
sendPrivateMsg
Misc.pm line 2054
--error----

ты не понял. С ошибкой я разобрался. Просто переставил плаг раза 2-3. Потом в боте прописал plugin load all. И заработало.
А конфликтует болталка, когда включен алетрсаунд. Т.е. ошибки нет, а кора молчит и не отвечает.
--------------------------------------------------------------------------------

Тока я не пойму "переустановить плагин 2-3 раза" это много много раз его скопировать в папку plugin????
plugin load all записать в config.txt?или в кансоли набрать?

Вобщем, алертсаунд удалил совсем(из конфига и из папки плагинов), от лайкхумана оставил тока 1 блок в конфиге(который на привет отвечает привет), и еще написал plugin load all в config.txt,и в консоли набрал до кучи. не помогает.

После ошибки в кансоли пишется следующее:
The error message is:
Can`t locate method "SendPrivateMsg" via package
"Network::DirectConnection" at C:/RObot/src/Misc.pm line 2054.
ну а текст файла error.txt при этой ошибке уже много раз выкладывали
Ahilles666
Новичок
Сообщения: 14
Зарегистрирован: Ср янв 17, 2007 6:54 pm

Сообщение Ahilles666 »

2 miniBot
Я его перечитал раз 20...алерт саунд отрубал, конф переписывал,копировал...чего только непробовал-молчит и всё... я конечно дурак, но просто непонимаю что нетак...

З.Ы.
РТФМ непоможет, я их прочитал)
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse »

Господа. ЛайкХуман давно поправили. И АлертСаунд тоже!
Вообще что вы парите себе и другим мозг? Идёте на главный форум, и задаёте там свои дурацкие вопросы... там вас точно пошлют по дальше.
Kaiser
Начинающий
Сообщения: 47
Зарегистрирован: Пн ноя 13, 2006 12:09 pm

Сообщение Kaiser »

лан я задам :)
почитал про регулярные выражения и возник вопрос)

Код: Выделить всё

/при(в|ва)/i
работает ... но если добавить синтаксис

Код: Выделить всё

m/при(в|ва)/i
эта конструкция не хочет работать :(
проблема в лайке?
читаю мануал тру весчь...
Danil
Новичок
Сообщения: 11
Зарегистрирован: Вс ноя 19, 2006 7:21 pm
Контактная информация:

Сообщение Danil »

Прочитал весь форум но ненашел подобного...
Я хочу сделать так что в likehuman'е при определенном"answers" бот уходил в reconnect. Как это сделать? Подскажите пожалуйста.
Зараннее спасибо
Изображение
Бадум
Энтузиаст
Сообщения: 149
Зарегистрирован: Сб фев 10, 2007 12:51 am

Сообщение Бадум »

Здравствуйте.
Суть проблемы - поставил плагин, вбил в конфиг вот это:
likeHumanOn 1
likeHumanIgnore /GM_/
likeHuman {
questions /прив/;превед;хай;ку;/есть/;/знаешь/;/где/;/как/;/что/;
answers привет;медвед;хой;ку;неа;незнаю;непомню;смотри на форуме roinfo.ru;незнаю
onPub 1
distance 3
onSystem 0
onGuild 0
onParty 0
onPM 1
chatCount 10
endings всё, отстань; не мешай плиз качаца; дай покачаться спокойно; всё, я занят; не мешай плз; извини у меня важный разговор в привате, не мешай плиз;
}
- чисто проверить работоспособность. Захожу пристом, пишу боту "как пройти в библиотеку?". Через секунд 10 вылетает ошибка:
OpenKore version 1.9.3
@ai_seq = likeHuman move route attack route
conState = 5
Loaded plugins:
plugins/alertsound.pl (alertsound)
plugins/doCommand.pl (doCommand)
plugins/kadiliman.pl (kadiliman)
plugins/likehuman.pl (likehuman)
plugins/macro.pl (macro)
plugins/patchConnect.pl (patchconnect)
plugins/ropp.pl (ppengine)

Error message:
Can't locate object method "sendPrivateMsg" via package "Network::DirectConnection" at C:/BOTS/Swordman-pupa/src/Misc.pm line 2056.

Stack trace:
Can't locate object method "sendPrivateMsg" via package "Network::DirectConnection" at C:/BOTS/Swordman-pupa/src/Misc.pm line 2056
Misc::sendMessage('Network::DirectConnection=HASH(0x2a90b7c)', 'pm', 'извини у меня важный разговор в привате, не мешай плиз', 'AntLion') called at C:/BOTS/Swordman-pupa/plugins/likehuman.pl line 301
likehuman::AI_post('AI_post', 'undef', 'undef') called at C:/BOTS/Swordman-pupa/src/Plugins.pm line 378
Plugins::callHook('AI_post') called at C:/BOTS/Swordman-pupa/src/AI/CoreLogic.pm line 191
AI::CoreLogic::iterate() called at C:/BOTS/Swordman-pupa/src/functions.pl line 541
main::mainLoop_initialized() called at C:/BOTS/Swordman-pupa/src/functions.pl line 65
main::mainLoop() called at C:/BOTS/Swordman-pupa/src/Interface.pm line 74
Interface::mainLoop('Interface::Console::Win32=HASH(0x23cba14)') called at openkore.pl line 96
main::__start() called at start.pl line 127

Died at this line:
} elsif ($type eq "pm") {
* $sender->sendPrivateMsg($user, $msg);
Поискал по форуму - схожие ошибки встречаются, но есть отличия.
А если и есть описания моей проблемы - ответа четкого нет.
Вот например. viewtopic.php?p=11461&highlight=sendprivatemsg#11461
Пытался отключать АлертСаунд - не помогло.
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse »

Господа. Проблемы обговариваются в вопросах по опенкоре!
готовые решения ищем здеаь.
DraG
Новичок
Сообщения: 13
Зарегистрирован: Сб янв 06, 2007 9:20 am

Сообщение DraG »

Аналогичная ситуация, при попытке бота написать автответ, слетает в ошибку..подправка плагина, и удаление алертсаунда не помогает. сборка коры последняя. и может уже вхатит придиратсья к словам, и стоит дать ответ?(просьба к тем кто знает)
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

DraG
kLabMouse
Бадум
Проблема именно в лайкХумане? При его удалении ошибка пропадает?
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
b0tter
Энтузиаст
Сообщения: 67
Зарегистрирован: Вт ноя 14, 2006 10:33 am
Контактная информация:

Сообщение b0tter »

Странно, исправленную версию видел когда-тона форуме.
SVN 5506 Проблем не возникает.
Вот она на всякий случай:

Код: Выделить всё

package likehuman;

#
# likeHuman v 3.0.1
#
# This plugin was made by taking some parts of kadiliman's ChatBot and the "match" sub of hakore's ReactOnNPC plugins.
# Change it as your will. 
# This plugin is FREE, so you can do whatever(yes, whatever) you want with it.
# By Buggless
#
# Working on openkore 1.9.x and 1.6.8+ 
#
# It will run only when AI is on.
# An overlap on ChaCount conditions on same messages will cause last block to replace the first response (former one).
# Usage:
# on config.txt should include:
#
# likeHumanOn (0|1)            is a flag to turn on (1) and off (0) plugin
# likeHumanInLockOnly (0|1)            is a flag to turn on (1) and off (0) responses only on lockMap
# likeHumanConsole (0|1)            is a flag to turn on (1) and off (0) console messages
# likeHumanIgnore <semicolon_separated_list_of_names_also_regex>
# likeHumanStopAfter <number_of_max_responses_to_same_user>
# likeHumanRealIgnoreOn (0|1)            is a flag to turn on (1) and off (0) the ignore openkore option after
#							"likeHumanStopAfter" max responses are reached or in case "endings" condition
#							is accomplished.
#
# likeHuman {
#    questions <semicolon_separated_possible_from_msg_also_regex>
#    answers <semicolon_separated_possible_responses>
#    onPub (0|1)            is a flag to turn set (1) or unset (0) this questions check on Public Chat
#    distance <max distance> is the max distance to the char that makes the pubMsg, you will cosider to make a response to
#    onSystem (0|1)            is a flag to turn set (1) or unset (0) this questions check on System Chat
#    onGuild (0|1)            is a flag to turn set (1) or unset (0) this questions check on Guild Chat
#    onParty (0|1)            is a flag to turn set (1) or unset (0) this questions check on Party Chat
#    onPM (0|1)            is a flag to turn set (1) or unset (0) this questions check on Private Msg Chat
#    chatCount <range>      is a range to set how many times you will response to the same user
#    endings <semicolon_separated_possible_close_chat_responses>
# }
#

use strict;
use Plugins;
use Globals;
use Log qw(message warning error debug);
use Misc;
use Network;
use Network::Send;
use Utils;

my %chatcount;
my %chatended;
my @ignorelist;
my %totalcount;

my $questionlist;
my @questions;
my $answerlist;
my @answers;
my $answer;
my $sanswer = 0;
my $endingslist;
my @endings;

my $prefix = "likeHuman_";

Plugins::register('likehuman', 'Human-Chat-Like behavior bot', \&Unload);

my $hooks = Plugins::addHooks(
				['packet_pubMsg', \&onMsg, undef],
				['packet_privMsg', \&onMsg, undef],
				['packet_selfChat', \&onMsg, undef],
				['packet_partyMsg', \&onMsg, undef],
				['packet_guildMsg', \&onMsg, undef],
				['AI_post', \&AI_post, undef]
			);

sub Unload {
	Plugins::delHooks($hooks);
}

sub onMsg {

      return unless ($main::conState == 5);
	return if (!$config{'likeHumanOn'});
	return unless $AI;
	return if (AI::inQueue("likeHuman"));
	return if (($config{'likeHumanInLockOnly'} > 0) && ($field{name} ne $config{lockMap}));

	debug " Starting Check of Chat Message.\n", "likeHuman";

	my ($packet, $args) = @_;
	
	
	my $likeMsgUsr = (($packet eq 'packet_selfChat') ? ($args->{user}) : ($args->{MsgUser}));


	my $likeMsg = (($packet eq 'packet_selfChat') ? ($args->{msg}) :  ($args->{Msg}));


	if ($config{'likeHumanStopAfter'}){

		debug " Checking if Message Received by User '$likeMsgUsr' are more than $config{'likeHumanStopAfter'}.\n", "likeHuman";
			
		debug " Received are '$totalcount{$likeMsgUsr}'.\n", "likeHuman";

		if ($totalcount{$likeMsgUsr} > $config{'likeHumanStopAfter'}) {
			if ($config{'likeHumanRealIgnoreOn'} == 1) {
				Commands::cmdIgnore "ignore","1 $likeMsgUsr";
			}
			return;
		};
			
		$totalcount{$likeMsgUsr}++;
	}

	if ($config{'likeHumanIgnore'}){

		debug " Checking if User '$likeMsgUsr' should be ignored.\n", "likeHuman";
		
		my $ignorel;

		$ignorel = $config{'likeHumanIgnore'};
		@ignorelist = split(/\s*;+\s*/, $ignorel);

		for (my $ii = 0; $ii < @ignorelist; $ii++) {
     			next unless defined $ignorelist[$ii];
      		if (match($ignorelist[$ii],$likeMsgUsr)){
				debug " Match Found ['$ignorelist[$ii]'] vs. ['$likeMsgUsr'] - Ignoring.\n", "likeHuman";
				if ($config{'likeHumanRealIgnoreOn'} == 1) {
					Commands::cmdIgnore "ignore","1 $likeMsgUsr";
				}
				return;
			};
		}

	}

	for (my $i = 0; (exists $config{$prefix.$i}); $i++) {

		debug " Checking for likeHuman Block '$i'.\n", "likeHuman";

		debug " Checking if it is not our own Message.\n", "likeHuman";

		return if ($likeMsgUsr eq $char->{name});

		debug " Checking if Chat was ended with User '$likeMsgUsr'.\n", "likeHuman";

		return if ($chatended{$likeMsgUsr} == 1);

		$questionlist = $config{$prefix .$i. "_questions"};
		$answerlist = $config{$prefix .$i. "_answers"};
		@questions = split(/\s*;+\s*/, $questionlist);
		@answers = split(/\s*;+\s*/, $answerlist);
		$answer = $answers[rand(@answers)];
		$endingslist = $config{$prefix .$i. "_endings"};
		@endings = split(/\s*;+\s*/, $endingslist);

		debug " Values are:\nQuestions '$questionlist'\nAnswers '$answerlist'\nEndings '$endingslist'.\nRandom Answer '$answer'.\n", "likeHuman";

		my $type;

		debug " Checking Message Channel.($packet)\n", "likeHuman";

		if (($packet eq 'packet_pubMsg') && $config{$prefix.$i."_onPub"}) {

			debug " Public Channel Detected.\n", "likeHuman";

			$sanswer=likeCheckMsg($likeMsgUsr,$likeMsg,$i);
			$type = "c";

			if ($config{$prefix.$i."_distance"}) {

				debug " Checking distance.\n", "likeHuman";
				my $actor;
				if ($args->{pubID}) {
					if ((substr($Settings::VERSION, 0, 3) >= 1.9) && (substr($Settings::VERSION, 4) >= 1)){
					        $actor = $Globals::playersList->getByID($args->{pubID});        
					} else {
					        $actor = $Globals::players{$args->{pubID}};
					}
					$sanswer = 0 if (distance($char->{pos_to},$actor->{pos_to}) > $config{$prefix.$i."_distance"});
				}
			}
		}
		elsif (($packet eq 'packet_selfChat') && $config{$prefix.$i."_onSystem"}) {

			debug " System Channel Detected.\n", "likeHuman";

			if ($likeMsg =~/:/) {
				($likeMsgUsr, $likeMsg) = $likeMsg =~ /(.*?).:.(.*)/;
			} 
			else {
				$likeMsgUsr="Server";
			}
			$sanswer=likeCheckMsg($likeMsgUsr,$likeMsg,$i);

			$type = "c";

		}
		elsif (($packet eq 'packet_guildMsg') && $config{$prefix.$i."_onGuild"}) {

			debug " Guild Channel Detected.\n", "likeHuman";

			$sanswer=likeCheckMsg($likeMsgUsr,$likeMsg,$i);

			$type = "g";

		} 
		elsif (($packet eq 'packet_partyMsg')&& $config{$prefix.$i."_onParty"}) {

			debug " Party Channel Detected.\n", "likeHuman";

			$sanswer=likeCheckMsg($likeMsgUsr,$likeMsg,$i);
			
			$type = "p";

		} 
		elsif (($packet eq 'packet_privMsg')&& $config{$prefix.$i."_onPM"}) {

			debug " Private Channel Detected.\n", "likeHuman";

			$sanswer=likeCheckMsg($likeMsgUsr,$likeMsg,$i);			

			$type = "pm";
		}

		next if (!$sanswer);

		# exit if the config option is not enabled
		next if (!$type);

		# exit if we don't have any reply
		next if (!$answer);
			
		## COPIED FROM processChatResponse, ChatQueue.pm
		# Calculate a small delay (to simulate typing)
		# The average typing speed is 65 words per minute.
		# The average length of a word used by RO players is 4.25 characters (yes I measured it).
		# So the average user types 65 * 4.25 = 276.25 charcters per minute, or
		# 276.25 / 60 = 4.6042 characters per second
		# We also add a random delay of 0.5-1.5 seconds.
		my @words = split /\s+/, $answer;
		my $average;
		foreach my $word (@words) {
			$average += length($word);
		}
		$average /= (scalar @words);
		my $typeSpeed = 65 * $average / 60;
	
		my $likeArgs;
		$likeArgs->{timeout} = (0.5 + rand(1)) + (length($answer) / $typeSpeed);

		debug " Timeout will be '$likeArgs->{timeout}'.\n", "likeHuman";

		$likeArgs->{time} = time;
		$likeArgs->{stage} = "start";
		$likeArgs->{reply} = $answer;
		$likeArgs->{prefix} = $prefix.$i;
		$likeArgs->{type} = $type;
		$likeArgs->{privMsgUser}= $likeMsgUsr;
		if ((AI::action ne 'likeHuman') && (main::checkSelfCondition($prefix))) {
			AI::queue("likeHuman", $likeArgs);
			
			debug " Putting response in Queue.\n", "likeHuman";
			message "likeHuman Block '$i' - Responding '$likeArgs->{reply}' to '$likeArgs->{privMsgUser}' in '$likeArgs->{timeout}' seconds.\n", "likeHuman" if ($config{'likeHumanConsole'});

		}
			
		$sanswer = 0;
	}
}

sub AI_post {
	if (AI::action eq 'likeHuman') {
		my $args = AI::args;
		if ($args->{stage} eq 'end') {
			AI::dequeue;

			debug " Removing response from Queue.\n", "likeHuman";

		} elsif ($args->{stage} eq 'start') {
			$args->{stage} = 'message' if (main::timeOut($args->{time}, $args->{timeout}));

			debug " Executing response in Queue.\n", "likeHuman";

		} elsif ($args->{stage} eq 'message') {

			debug " Sending response.\n", "likeHuman";
			my $net2;

			if ((substr($Settings::VERSION, 0, 3) >= 1.9) && (substr($Settings::VERSION, 4) >= 0)){
			        $net2 = $Globals::net;        
			} else {
			        $net2 = \$Globals::remote_socket;
			}

			if ($args->{type} ne 'pm'){
				sendMessage($messageSender, $args->{type}, $args->{reply}, undef);
			}
			else {
				sendMessage($messageSender, $args->{type}, $args->{reply}, $args->{privMsgUser});
			}

			$args->{stage} = 'end';
		}
	}
}
sub match
{
	my ($pattern,$subject) = @_;
	
	if (my ($re, $ci) = $pattern =~ /^\/(.+?)\/(i?)$/)
	{	
		if (($ci && $subject =~ /$re/i) || (!$ci && $subject =~ /$re/))
		{
			return 1;
		}
	}
	elsif ($subject eq $pattern)
	{
		return 1;
	}
	return 0;
}

sub likeCheckMsg
{
	my ($likeMsgUsr,$likeMsg,$i) = @_;
	my $ssanswer=$sanswer;

	debug " Messages previously received by '$likeMsgUsr' are $chatcount{$likeMsgUsr . '_' .$i}.\n", "likeHuman";
	debug "Usr:$likeMsgUsr Msg:$likeMsg\n", "likehuman";

	if ($config{$prefix . $i . "_chatCount"}) {
		for (my $ii = 0; $ii < @questions; $ii++) {
      		next unless defined $questions[$ii];
 			if (match($questions[$ii],$likeMsg)){

				debug " Match Found ['$questions[$ii]'] vs. ['$likeMsg'] - Responding '$answer'.\n", "likeHuman";

				$chatcount{$likeMsgUsr . "_" .$i}++;

				$ssanswer = 1;
			};
		}
		if (!(Utils::inRange($chatcount{$likeMsgUsr . "_" .$i}, $config{$prefix . $i . "_chatCount"})) && ($ssanswer == 1)) {
			if ($config{$prefix .$i. "_endings"}) {
				$answer = $endings[rand(@endings)];
				$chatended{$likeMsgUsr} = 1;
				if ($config{'likeHumanRealIgnoreOn'} == 1) {
					Commands::cmdIgnore "ignore","1 $likeMsgUsr";
				}
			} else  {
				$ssanswer = 0;
			}

			debug " ChatCount not in Range [$chatcount{$likeMsgUsr . '_' .$i} : $config{$prefix . $i . '_chatCount'}] - Ending Chat.\nResponding '$answer'.\n", "likeHuman";
			message "likeHuman Block '$i' - Not Responding to '$likeMsgUsr' Cause ChatCount = $chatcount{$likeMsgUsr . '_' .$i}.\n", "likeHuman" if ($config{'likeHumanConsole'});

		}  
	}else  {
		for (my $ii = 0; $ii < @questions; $ii++) {
			next unless defined $questions[$ii];
     			if (match($questions[$ii],$likeMsg)){
				$ssanswer = 1;

				debug " Match Found ['$questions[$ii]'] vs. ['$likeMsg'] - Responding '$answer'.\n", "likeHuman";

				$chatcount{$likeMsgUsr . "_" .$i}++;

			};
		}
	}
	return $ssanswer;
}


return 1;
Open Your Mind. Use Open Source.
Ответить