Страница 1 из 1

Бот Болтун с задержкой ответа

Добавлено: 14 ноя 2010, 17:46
Disconnect
Здраствуйте!
Простите не сильно разбираюсь в скриптах (вообще не разбираюсь), глупый вопрос...
Как поставить задержу на вывод ответа в Говоруне ?..
Пытался втюхивать :
"tmr = TmrMan.AddTimer (5000)
function OnTimer(tmr) "
в разные места основной функции... выходило какоето зацикливание , и бот писал 30 раз ответ в один момент ,и повторял каждые 5 секунд , через 5 секунд после ввода команды ключа.... собственно тело старого доброго говоруна

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

BotName = "Bot"		-- имя бота 
BotDesc = "Ня ^^"	-- описание бота
BotEmail = "email"	-- email бота

TableName = {
}

trigs = { 
}

Rus={["А"]="а",["Б"]="б",["В"]="в",["Г"]="г",["Д"]="д",["Е"]="е",["Ё"]="ё",["Ж"]="ж",["З"]="з",["И"]="и",["Й"]="й",["К"]="к",["Л"]="л",["М"]="м",["Н"]="н",["О"]="о",["П"]="п",["Р"]="р",["С"]="с",["Т"]="т",["У"]="у",["Ф"]="ф",["Х"]="х",["Ц"]="ц",["Ч"]="ч",["Ш"]="ш",["Щ"]="щ",["Ъ"]="ъ",["Ы"]="ы",["Ь"]="ь",["Э"]="э",["Ю"]="ю",["Я"]="я"}

function OnStartup()
	if (_VERSION == "Lua 5.1.1") or (_VERSION == "Lua 5.1") then
		TableMaxSize = table.maxn
	elseif (_VERSION == "Lua 5.0.2") then
		TableMaxSize = table.getn
	end

	Core.RegBot(BotName, BotDesc, BotEmail, true)
end
 
function ChatArrival(curUser, data)
	if TableName[curUser.sNick] ~=1 then if string.sub(data, 1, 1) then
		data=string.sub(data,1,string.len(data)-1)
		s,e,cmd,RestOfText = string.find( data, "%b<>%s+(%S+)%s+(.*)" )                          
		if RestOfText == nil then
			RestOfText = ""												 
			s,e,cmd = string.find( data, "%b<>%s+(%S+)" )							 
		end
	end
		s,e,mess = string.find(data, "^%b<>%s(.*)$")
		for key in pairs(trigs) do
			if mess then
				for b,s in pairs(Rus) do
					data=string.gsub(data , b, Rus[b])
					if( string.find(data, key) ) then
					answer, x = string.gsub(trigs[key][math.random(1,TableMaxSize(trigs[key]))], "%b[]", curUser.sNick)
					Core.SendToAll("<"..curUser.sNick.."> "..cmd.." "..RestOfText)
					Core.SendToAll("<"..BotName.."> "..answer )					 
					return true
					end
				end
				if( string.find( string.lower(mess), key) ) then
					answer, x = string.gsub(trigs[key][math.random(1,TableMaxSize(trigs[key]))], "%b[]", curUser.sNick)
					Core.SendToAll("<"..curUser.sNick.."> "..cmd.." "..RestOfText)				 
					Core.SendToAll("<"..BotName.."> "..answer )
					return true
				end
			end
		end
	end
end

Добавлено: 14 ноя 2010, 19:30
Вечный

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

function ChatArrival(curUser, data)
	if TableName[curUser.sNick] ~=1 then if string.sub(data, 1, 1) then
		data=string.sub(data,1,string.len(data)-1)
		s,e,cmd,RestOfText = string.find( data, "%b<>%s+(%S+)%s+(.*)" )                          
		if RestOfText == nil then
			RestOfText = ""												 
			s,e,cmd = string.find( data, "%b<>%s+(%S+)" )							 
		end
	end
		s,e,mess = string.find(data, "^%b<>%s(.*)$")
		for key in pairs(trigs) do
			if mess then
				for b,s in pairs(Rus) do
					data=string.gsub(data , b, Rus[b])
					if( string.find(data, key) ) then
					answer, x = string.gsub(trigs[key][math.random(1,TableMaxSize(trigs[key]))], "%b[]", curUser.sNick)
					Core.SendToAll("<"..curUser.sNick.."> "..cmd.." "..RestOfText)
					Core.SendToAll("<"..BotName.."> "..answer )					 
					return true
					end
				end
				if( string.find( string.lower(mess), key) ) then
					answer, x = string.gsub(trigs[key][math.random(1,TableMaxSize(trigs[key]))], "%b[]", curUser.sNick)
					Core.SendToAll("<"..curUser.sNick.."> "..cmd.." "..RestOfText)
                                                tmr = TmrMan.AddTimer (5000)
	                                               function OnTimer(tmr)				 
					                      Core.SendToAll("<"..BotName.."> "..answer )
	                                                      TmrMan.RemoveTimer(tmr)
	                                               end
					return true
				end
			end
		end
	end
end
Как-то так.

Добавлено: 14 ноя 2010, 20:41
Disconnect
спс..теперь всё отлично , только поставить это нововведение нужно и в первое условие ответа , обычно срабатывает именно оно...

Добавлено: 14 ноя 2010, 21:10
Вечный
Ну да, первое я не заметил просто. :-)

Добавлено: 15 фев 2011, 16:44
[North]LordWolf
Можно вопрос,а нафига эти говоруны нужны вообще?По сути их щас ставят в стандартной комплектации фраз,ну там пару фраз админы от себя добавят и все,и смысла в них нет,наоборот только мешает когда с кем нить общаешься.