myDC.ru

Здравствуйте, гость ( Вход | Регистрация )

 
 
Ответить в данную темуНачать новую тему

> Confirmer, скрипт согласия с правилами хаба

Теги
Нет тегов для показа
engineer
сообщение 22.12.2009, 20:36
Сообщение #1


Участник
**

Группа: Пользователи
Сообщений: 32
Регистрация: 14.7.2009
Из: Россия
Пользователь №: 3 871
Спасибо сказали: 1 раз




Друзья, этот скрипт работал на PtokaX 0.3.6.0. Конвертировал его для PtokaX 0.4.1.1. Скрипт функционирует не полностью - пропускает фразы юзера (до конвертации на старой птоке ничего не пропускал пока не согласишься с правилами). Выглядит это так: заходим, пытаемся написать "каля-маля" в чате, выскакивает сообщение о знакомстве с правилами и написании согласия в ответ и ниже всего этого наше "каля-маля", пишем ещё раз, всё повторяется. Пишем "...согласен..." - всё работает как надо: напоминание отключается, мой IP заносится в список.
Подскажите, где конвертор ошибся или лишнего присобачил, мож отрезал чего?
Код
-- Этот скрипт конвертирован программой PtokaX LUA API Конвертор v0.9. Русская версия 12/22/09 20:05:00
BOT = SetMan.GetString(21)
SET = "sIP" -- определение по IP, "sName" -- по нику
Mode = 1 -- 1 - в общий, 2 - в приват. 0 - не отсылать

IConfirm = "я соглашаюсь с правилами"

Confirm = { }
data_file = "scripts/Rules/data.txt"
dofile(data_file)

function UserConnected(user)
    Core.GetUserAllData(user)
    if Confirm[user[SET]] == nil then
        SendTo(user, BOT, SendConfirm)
    end
end
OpConnected = UserConnected

function ChatArrival(user,data)
    Core.GetUserAllData(user)
    local _,_, Message = string.find(data, "%b<>%s+("..IConfirm..")")
    IConfirmPars(user, Message)
    if Confirm[user[SET]] == nil then
        return SendTo(user, BOT, SendConfirm)
    end
end

function SendTo(user, BOT, SendConfirm)
    if Mode == 1 then
        Core.SendToNick(user.sNick,"<"..BOT.."> ".. SendConfirm)
    elseif Mode == 2 then
        Core.SendPmToNick(user.sNick,BOT, SendConfirm)
    elseif Mode == 0 then
    end
return 1
end

function ToArrival(user,data)
    Core.GetUserAllData(user)
local _,_,To,From,Message = string.find(data,"$To:%s+(%S+)%s+From:%s+%S+%s+$<(%S+)>%s+(.*)|")
    if To == BOT then
        IConfirmPars(user, Message )
    end
end

function IConfirmPars(user, Message )
    if Message == IConfirm then
        Confirm[user[SET]] = 1
        SendTo(user, BOT,"Теперь вы полноправный участник чата!")
        SaveToFile(data_file, Confirm, "Confirm")
    end
end

function ReadFile(file)
    local f = io.open(file, "r")
    return f:read("*all")
end; rules_txt = ReadFile("scripts/Rules/info.txt")
SendConfirm = "Перед тем, как начать общение, ознакомьтесь с информацией хаба и правилами поведения в чате. \n" .. rules_txt .. "\n" .. "Если вы согласны с правилами - напишите фразу:     " .. IConfirm .."     и отправьте в чат."

function SaveToFile(file , table , tablename)
    local handle = io.open(file,"w+")
    handle:write(Serialize(table, tablename))
    handle:flush()
    handle:close()
    collectgarbage(collect)
end

function Serialize(tTable, sTableName, sTab)
    sTab = sTab or "";
    sTmp = ""
    sTmp = sTmp..sTab..sTableName.." = {\n"
    for key, value in pairs(tTable) do
        local sKey = (type(key) == "string") and string.format("[%q]",key) or string.format("[%d]",key);
        if(type(value) == "table") then
            sTmp = sTmp..Serialize(value, sKey, sTab.."\t");
        else
            local sValue = (type(value) == "string") and string.format("%q",value) or tostring(value);
            sTmp = sTmp..sTab.."\t"..sKey.." = "..sValue
        end
        sTmp = sTmp..",\n"
    end
    sTmp = sTmp..sTab.."}"
    return sTmp
end
RegConnected = UserConnected
Go to the top of the page
+Quote Post
Артём
сообщение 22.12.2009, 20:57
Сообщение #2


Наруто на аваторке
***********

Группа: Пользователи
Сообщений: 2 606
Регистрация: 11.10.2008
Из: Харькова
Пользователь №: 771
Спасибо сказали: 774 раза




http://mydc.ru/index.html?showtopic=1118&a...ost&p=19064
сам скрипт не выкладываю ибо дядька Николя ругает меня)) victory.gif


Спасибо сказали:
Go to the top of the page
+Quote Post
engineer
сообщение 22.12.2009, 21:49
Сообщение #3


Участник
**

Группа: Пользователи
Сообщений: 32
Регистрация: 14.7.2009
Из: Россия
Пользователь №: 3 871
Спасибо сказали: 1 раз




Дружище, я форум уже часов 9 читаю, собираю хаб на PtokaX 0.4.1.1 с такими же скриптами, какие у меня были. И там был (по вашей ссылке) - 3 раза перечитывал, но моя проблема там не решается. Я качал все возможные варианты (например в вашем сообщения идут в личку, а мне надо в общий), пытался сравнить ваш и мой, как это переделать я не знаю. Тема там называется "одноразовая рассылка". У меня не рассылка, у меня согласие с правилами с функцией запрета чата без согласия.
Я наскреб на форуме почти все нужные скрипты, теперь добиваюсь сходства по функциям, т.к. они сильно расходятся со своими предшественниками.
Go to the top of the page
+Quote Post
Артём
сообщение 22.12.2009, 22:03
Сообщение #4


Наруто на аваторке
***********

Группа: Пользователи
Сообщений: 2 606
Регистрация: 11.10.2008
Из: Харькова
Пользователь №: 771
Спасибо сказали: 774 раза




anger.gif
Прикрепленный файл  Confirmer_API2_.zip ( 2.48 килобайт ) Кол-во скачиваний: 68
hell_boy.gif
Я Дал ссыль на тот скрипт что в первом посте, но только уже под API2 !!!


Спасибо сказали:
Go to the top of the page
+Quote Post
X-Sky
сообщение 22.12.2009, 22:14
Сообщение #5


Освоившийся участник
*****

Группа: Модераторы
Сообщений: 352
Регистрация: 25.7.2009
Пользователь №: 3 960
Спасибо сказали: 73 раза




ВАСЯ, достаточно было изменить return 1 на return true
Лови:
Нажмите СЮДА для открытия просмотра кода скрипта
BOT = SetMan.GetString(21)
SET = "sIP" -- определение по IP, "sName" -- по нику
Mode = 1 -- 1 - в общий, 2 - в приват. 0 - не отсылать

IConfirm = "я соглашаюсь с правилами"

Confirm = { }
data_file = Core.GetPtokaXPath().."scripts/1/data.txt"
dofile(data_file)

function UserConnected(user)
Core.GetUserAllData(user)
if Confirm[user[SET]] == nil then
SendTo(user, BOT, SendConfirm)
end
end
OpConnected = UserConnected

function ChatArrival(user,data)
Core.GetUserAllData(user)
local _,_, Message = string.find(data, "%b<>%s+("..IConfirm..")")
IConfirmPars(user, Message)
if Confirm[user[SET]] == nil then
return SendTo(user, BOT, SendConfirm)
end
end

function SendTo(user, BOT, SendConfirm)
if Mode == 1 then
Core.SendToNick(user.sNick,"<"..BOT.."> ".. SendConfirm)
elseif Mode == 2 then
Core.SendPmToNick(user.sNick,BOT, SendConfirm)
elseif Mode == 0 then
end
return true
end

function ToArrival(user,data)
Core.GetUserAllData(user)
local _,_,To,From,Message = string.find(data,"$To:%s+(%S+)%s+From:%s+%S+%s+$<(%S+)>%s+(.*)|")
if To == BOT then
IConfirmPars(user, Message )
end
end

function IConfirmPars(user, Message )
if Message == IConfirm then
Confirm[user[SET]] = 1
SendTo(user, BOT,"Теперь вы полноправный участник чата!")
SaveToFile(data_file, Confirm, "Confirm")
end
end

function ReadFile(file)
local f = io.open(file, "r")
return f:read("*all")
end; rules_txt = ReadFile(Core.GetPtokaXPath().."scripts/1/info.txt")
SendConfirm = "Перед тем, как начать общение, ознакомьтесь с информацией хаба и правилами поведения в чате. \n" .. rules_txt .. "\n" .. "Если вы согласны с правилами - напишите фразу: " .. IConfirm .." и отправьте в чат."

function SaveToFile(file , table , tablename)
local handle = io.open(file,"w+")
handle:write(Serialize(table, tablename))
handle:flush()
handle:close()
collectgarbage(collect)
end

function Serialize(tTable, sTableName, sTab)
sTab = sTab or "";
sTmp = ""
sTmp = sTmp..sTab..sTableName.." = {\n"
for key, value in pairs(tTable) do
local sKey = (type(key) == "string") and string.format("[%q]",key) or string.format("[%d]",key);
if(type(value) == "table") then
sTmp = sTmp..Serialize(value, sKey, sTab.."\t");
else
local sValue = (type(value) == "string") and string.format("%q",value) or tostring(value);
sTmp = sTmp..sTab.."\t"..sKey.." = "..sValue
end
sTmp = sTmp..",\n"
end
sTmp = sTmp..sTab.."}"
return sTmp
end
RegConnected = UserConnected


Спасибо сказали:
Go to the top of the page
+Quote Post
Alexey
сообщение 22.12.2009, 22:17
Сообщение #6


7 квадратиков
*******

Группа: Модераторы
Сообщений: 793
Регистрация: 21.1.2009
Пользователь №: 1 895
Спасибо сказали: 301 раз




Замени return 1 на return true, а return 0 на просто return.


Спасибо сказали:
Go to the top of the page
+Quote Post
engineer
сообщение 22.12.2009, 22:20
Сообщение #7


Участник
**

Группа: Пользователи
Сообщений: 32
Регистрация: 14.7.2009
Из: Россия
Пользователь №: 3 871
Спасибо сказали: 1 раз




Огромное всем спасибо за помощь! Теперь думаю это правило (1 на true, 0 на false) мне поможет в дальнейшей конвертации своего старья.
Go to the top of the page
+Quote Post
X-Sky
сообщение 22.12.2009, 22:35
Сообщение #8


Освоившийся участник
*****

Группа: Модераторы
Сообщений: 352
Регистрация: 25.7.2009
Пользователь №: 3 960
Спасибо сказали: 73 раза




Пожалуйста, обращайся, если что big_smile.gif
Go to the top of the page
+Quote Post
ddss
сообщение 16.2.2011, 10:19
Сообщение #9


Абсолютный новичок


Группа: Пользователи
Сообщений: 2
Регистрация: 16.2.2011
Пользователь №: 8 796
Спасибо сказали: 0 раз




А как сделать чтоб сам бот сообщения не в ЛС кидал а в общем чате выводил ?
Go to the top of the page
+Quote Post
Артём
сообщение 16.2.2011, 13:17
Сообщение #10


Наруто на аваторке
***********

Группа: Пользователи
Сообщений: 2 606
Регистрация: 11.10.2008
Из: Харькова
Пользователь №: 771
Спасибо сказали: 774 раза




ddss, заменить
Код
Core.SendPmToUser(user,BOT, SendConfirm)
на
Код
Core.SendToUser(user, SendConfirm)
Go to the top of the page
+Quote Post
ddss
сообщение 17.2.2011, 1:50
Сообщение #11


Абсолютный новичок


Группа: Пользователи
Сообщений: 2
Регистрация: 16.2.2011
Пользователь №: 8 796
Спасибо сказали: 0 раз




Цитата(Артём @ 16.2.2011, 14:17) *
ddss, заменить
Код
Core.SendPmToUser(user,BOT, SendConfirm)
на
Код
Core.SendToUser(user, SendConfirm)

Там три таких значения

Код
function UserConnected(user)
    if Confirm[user[SET]] == nil then
        Core.SendPmToUser(user,BOT, SendConfirm)
    end
end


два таких

и одно такое:
Код
    if To == BOT then
        if Message == IConfirm then
            Confirm[user[SET]] = 1
            Core.SendPmToUser(user,BOT,"Теперь вы полноправный участник чата!")
Go to the top of the page
+Quote Post
Marc
сообщение 17.2.2011, 3:36
Сообщение #12


Активный участник
***

Группа: Пользователи
Сообщений: 93
Регистрация: 25.1.2010
Пользователь №: 5 828
Спасибо сказали: 7 раз




Воспользовался скриптом Артёма из 4-го сообщения!
Скрипт хороший и главное работает.
Но в нём только пути к текстам надо немного поправить и добавить "scripts/" перед двумя "Rules".
И главное нужный скрипт, так как теперь пользователи не скажут, что не знакомы с Правилами Хаба!
Но! Кроме этого скрипта, неплохо, чтобы сами Правила были всегда востребованы пользователями Хаба, то есть, чтобы они могли всеглда их запросить.
Я у себя так и сделал, советую и другим.
Go to the top of the page
+Quote Post
Артём
сообщение 17.2.2011, 15:25
Сообщение #13


Наруто на аваторке
***********

Группа: Пользователи
Сообщений: 2 606
Регистрация: 11.10.2008
Из: Харькова
Пользователь №: 771
Спасибо сказали: 774 раза




ddss, меняй там где тебе нужно bad_smile.gif
Go to the top of the page
+Quote Post
Saymon21
сообщение 17.2.2011, 19:38
Сообщение #14


Site Reliability Engineer
*********

Группа: Модераторы
Сообщений: 1 772
Регистрация: 27.6.2009
Из: Чувашия, г. Чебоксары
Пользователь №: 3 719
Спасибо сказали: 479 раз




давно пора изучить http://mydc.ru/topic118.html
Go to the top of the page
+Quote Post
STIVAN
сообщение 24.6.2011, 12:28
Сообщение #15


Активный участник
***

Группа: Пользователи
Сообщений: 52
Регистрация: 30.6.2010
Из: Волгоград
Пользователь №: 7 181
Спасибо сказали: 1 раз




Цитата(Артём @ 22.12.2009, 21:03) *
anger.gif
Прикрепленный файл  Confirmer_API2_.zip ( 2.48 килобайт ) Кол-во скачиваний: 68
hell_boy.gif
Я Дал ссыль на тот скрипт что в первом посте, но только уже под API2 !!!


Ошибка: Синтаксис: cannot open Rules/data.txt: No soch file or directory
Go to the top of the page
+Quote Post
Saymon21
сообщение 24.6.2011, 12:47
Сообщение #16


Site Reliability Engineer
*********

Группа: Модераторы
Сообщений: 1 772
Регистрация: 27.6.2009
Из: Чувашия, г. Чебоксары
Пользователь №: 3 719
Спасибо сказали: 479 раз




А перевести ошибку? No soch file or directory - Нет файла или каталога. А почему бы его не создать руками?
Go to the top of the page
+Quote Post
STIVAN
сообщение 24.6.2011, 13:00
Сообщение #17


Активный участник
***

Группа: Пользователи
Сообщений: 52
Регистрация: 30.6.2010
Из: Волгоград
Пользователь №: 7 181
Спасибо сказали: 1 раз




Цитата(Saymon21 @ 24.6.2011, 11:47) *
А перевести ошибку? No soch file or directory - Нет файла или каталога. А почему бы его не создать руками?

Я вот не пойму какой нужно создать.
Go to the top of the page
+Quote Post
Saymon21
сообщение 24.6.2011, 13:03
Сообщение #18


Site Reliability Engineer
*********

Группа: Модераторы
Сообщений: 1 772
Регистрация: 27.6.2009
Из: Чувашия, г. Чебоксары
Пользователь №: 3 719
Спасибо сказали: 479 раз




как тут не понять? Что тут не понять? Rules/data.txt

Даже посмотри код:
Код
data_file = "scripts/Rules/data.txt"
Go to the top of the page
+Quote Post

Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Сейчас: 27.11.2024, 4:34