myDC.ru

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

 
2 страниц V   1 2 >  
Тема закрытаНачать новую тему

> Меню - "использовать Ник", API 2

Теги
Нет тегов для показа
vicious
сообщение 21.3.2009, 16:38
Сообщение #1


Продвинутый участник
****

Группа: Пользователи
Сообщений: 173
Регистрация: 26.1.2009
Из: Saratov
Пользователь №: 1 965
Спасибо сказали: 7 раз




Предлагаю идею!
Есть так назаываемый сэйскрипт, который дает возможность писать от любого ника, но команду приходится использовать каждый раз...частенько это неудобно...
Предлагаю сделать такое меню:
Использовать ник -> :
1)- Использовать ник для общего чата
2)- Использовать ник для ПМ
3)- Использовать ник для всего
4)- отключить ник

При нажатии 1 и 2 или 3 в файл для того или иного юзера (в частности для админов) записывается соответсвующий выбранный им ник с параметром (1 or 2 or 3), и последующие сообщения этого юзера идут от этого ника, до тех пор пока он не обнулит запись (4) -Отключить ник)

Вроде все! Идею предложил...кто что думает?

ГОТОВО.
Название скрипта: Saynick (писал в дополнение скрипту "Сказать от любого имени")
Версия скрипта: 1.0
Версия API: API2
Автор: Vicious
- Возможность зарезервировать любой ник для общего чата(через меню), после чего все сообщения в
общий чат будут идти от этого ника, до тех пор пока вы не обнулите записи ников. (так же через меню)
- Возможность зарезервировать ник для ЛС, причем ответы, направленные зарезервированному вами
пользователю, теперь будут приходить вам.
Go to the top of the page
+Quote Post
alex82
сообщение 21.3.2009, 16:54
Сообщение #2


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1406 раз




Была такая идея. До практической реализации дело не дошло.
Go to the top of the page
+Quote Post
Setuper
сообщение 22.3.2009, 21:00
Сообщение #3


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Идея не плохая, однако она требует структурированного и универсального написания.
Go to the top of the page
+Quote Post
vicious
сообщение 23.3.2009, 8:06
Сообщение #4


Продвинутый участник
****

Группа: Пользователи
Сообщений: 173
Регистрация: 26.1.2009
Из: Saratov
Пользователь №: 1 965
Спасибо сказали: 7 раз




Цитата(Setuper @ 22.3.2009, 21:00) *
Идея не плохая, однако она требует структурированного и универсального написания.


и? Не станешь писать?
Go to the top of the page
+Quote Post
vicious
сообщение 24.3.2009, 23:11
Сообщение #5


Продвинутый участник
****

Группа: Пользователи
Сообщений: 173
Регистрация: 26.1.2009
Из: Saratov
Пользователь №: 1 965
Спасибо сказали: 7 раз




мучаюсь -мучаюсь ...нефига не получается! надо учить матчасть с нуля видать...никак не вьеду по нормальному как работать с текстовыми файлами...записывать, в них то что мне нужно и потом извлекать из них то что мне нужно.

Тобишь хочу чтобы при нажатии в меню "использовать ник" в текстовый файл записывалось что такому нику присвоилось такое-то имя....и дальше при ChatArrival смотрелось присвоен ли в этом текстовом файле данному нику какое-нибудь имя или нет...! ну вообщем вы поняли о чем я....но нефига не получается! Может все таки луа -мастеры отзовутся?
Go to the top of the page
+Quote Post
Wariner
сообщение 24.3.2009, 23:18
Сообщение #6


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




я не мастер... но проще всего будет инфу в файле хранить в виде таблицы. функции сохранения можно найти в разделе для разработчииков ==>> склад функций. пример работы с таблицами можешь взять из любого скрипта. например из этой темы http://mydc.ru/topic602.html
Go to the top of the page
+Quote Post
vicious
сообщение 24.3.2009, 23:48
Сообщение #7


Продвинутый участник
****

Группа: Пользователи
Сообщений: 173
Регистрация: 26.1.2009
Из: Saratov
Пользователь №: 1 965
Спасибо сказали: 7 раз




Цитата(Wariner @ 24.3.2009, 23:18) *
я не мастер... но проще всего будет инфу в файле хранить в виде таблицы. функции сохранения можно найти в разделе для разработчииков ==>> склад функций. пример работы с таблицами можешь взять из любого скрипта. например из этой темы http://mydc.ru/topic602.html


Да согласен, вообщем то я и пробовал в виде таблицы...по примеру скрипта одного...но у меня каждый раз перезаписывается текстовый файл, а не добавляется...хотя код скопирован со скрипта в котором добавлялось и кроме значений того, ЧТО добавлять я там не менял...(вроде бы)

Вот код на данном этапе:

Код
sBot = SetMan.GetString(21)    -- Имя бота
tNickam = {}
tNickpm = {}
function OnStartup()
    sFileam = Core.GetPtokaXPath().."scripts/Saynick/Nickam.tbl"
    sFilepm = Core.GetPtokaXPath().."scripts/Saynick/Nickpm.tbl"
    if loadfile(sFileam) and loadfile(sFilepm) then
        dofile(sFileam)
        dofile(sFilepm)
    end    
    TmrMan.AddTimer(1800000,"OnExit")
end

function OnExit()
    --WriteTable(tNicks, "saynick", sFile)
end

function UserConnected(tUser)
    --if tUser.iProfile == 0 then
        local sMsg = "$UserCommand 1 1 **УПРАВЛЕНИЕ\\*Сказать\\Использовать ник для AM$<%[mynick]> !addamnick %[line:Введите ник для AM]||"..
                "$UserCommand 1 1 **УПРАВЛЕНИЕ\\*Сказать\\Использовать ник для PM$<%[mynick]> !addpmnick %[line:Введите ник для PM]||"..
                "$UserCommand 1 1 **УПРАВЛЕНИЕ\\*Сказать\\Сбросить ники$<%[mynick]> !remnicks||"..                
                 "$UserCommand 1 2 **УПРАВЛЕНИЕ\\*Сказать\\Использовать этот ник для AM$<%[mynick]> !addamnick %[nick]||"..
                 "$UserCommand 1 2 **УПРАВЛЕНИЕ\\*Сказать\\Использовать этот ник для PM$<%[mynick]> !addpmnick %[nick]||"
        Core.SendToUser(tUser, sMsg)
    --end
end
OpConnected = UserConnected
RegConnected = UserConnected


function ChatArrival(tUser, sData)
    sData = string.sub(sData,1,-2)
    nick = tUser.sNick
    local _,_,cmd = string.find(sData, "%b<>%s+(%S+)")
    if cmd == "!addamnick" then
        local _,_,sNick = string.find(sData, "%b<>%s+%S+%s+(%S+)")
        if not sNick then
        else    
            if sNick ~= tUser.sNick then
                   tNickam[tUser.sNick] = {}
                table.insert(tNickam[tUser.sNick], sNick)        
                WriteTable(tNickam, "Nickam", sFileam)
            else
            Core.SendToUser(tUser, "<"..sBot.."> Этот ник у вас по умолчанию в настройках DC")
            end
            
        end
    return true
    end
end    


function WriteTable(tTable, tablename, file)
    local handle = io.open(file, "w")
    Serialize(tTable, tablename, handle)
      handle:close()
end

function Serialize(tTable, sTableName, hFile, sTab)
    sTab = sTab or "";
    hFile:write(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
            Serialize(value, sKey, hFile, sTab.."\t");
        else
            local sValue = (type(value) == "string") and string.format("%q",value) or tostring(value);
            hFile:write(sTab..'\t["'..nick..'"] = '..sValue);
        end
        hFile:write(",\n");
    end
    hFile:write(sTab.."}");
end


Сразу говорю, скорее всего тут и оишбки и вообще попытка написать скрипт "по русски"...но увы как могу...я тока начинающий...
Go to the top of the page
+Quote Post
Setuper
сообщение 25.3.2009, 0:10
Сообщение #8


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Переменные должны быть одинаковы
Код
WriteTable(tNickam, "tNickam", sFileam)
Go to the top of the page
+Quote Post
vicious
сообщение 25.3.2009, 0:53
Сообщение #9


Продвинутый участник
****

Группа: Пользователи
Сообщений: 173
Регистрация: 26.1.2009
Из: Saratov
Пользователь №: 1 965
Спасибо сказали: 7 раз




Цитата(Setuper @ 25.3.2009, 0:10) *
Переменные должны быть одинаковы
Код
WriteTable(tNickam, "tNickam", sFileam)


хм...туплю наверн, но не понял. Что исправить и на что исправить?
Go to the top of the page
+Quote Post
Wariner
сообщение 25.3.2009, 8:06
Сообщение #10


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




заменить это
Код
WriteTable(tNickam, "Nickam", sFileam)

на
Код
WriteTable(tNickam, "tNickam", sFileam)


зачем под ник вводить подтаблицу?
Код
   tNickam[tUser.sNick] = {}
                table.insert(tNickam[tUser.sNick], sNick)

всё равно он не сможет писать с нескольких ников одновременно!
Код
   tNickam[tUser.sNick] = sNick

и всё))))
Go to the top of the page
+Quote Post
vicious
сообщение 25.3.2009, 12:36
Сообщение #11


Продвинутый участник
****

Группа: Пользователи
Сообщений: 173
Регистрация: 26.1.2009
Из: Saratov
Пользователь №: 1 965
Спасибо сказали: 7 раз




Спасибо, поменял. Уже гораздо лучше, но теперь вот что...
К примеру юзер№1 присваивает себе ник "maxim"...в таблицу записывает:
Код
tNickam = {
    ["юзер№1"] = "maxim",
}


Теперь юзер№2 присваивает себе ник "cooler" таблица примет вид:
Код
tNickam = {
    ["юзер№2"] = "maxim",
    ["юзер№2"] = "cooler",
}


Т.е. каждый новый ник записывается для всех зарезервированных имен. Проверял открывая два разных клиента.
Go to the top of the page
+Quote Post
Setuper
сообщение 25.3.2009, 12:44
Сообщение #12


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Ключи таблиц уникальны и не могут совпадать, то есть
Код
tNickam = {
    ["юзер№2"] = "maxim",
    ["юзер№2"] = "cooler",
}
это не правильно. Такого не может быть.
Go to the top of the page
+Quote Post
vicious
сообщение 25.3.2009, 12:57
Сообщение #13


Продвинутый участник
****

Группа: Пользователи
Сообщений: 173
Регистрация: 26.1.2009
Из: Saratov
Пользователь №: 1 965
Спасибо сказали: 7 раз




Цитата(Setuper @ 25.3.2009, 12:44) *
Ключи таблиц уникальны и не могут совпадать, то есть
Код
tNickam = {
    ["юзер№2"] = "maxim",
    ["юзер№2"] = "cooler",
}
это не правильно. Такого не может быть.


Ну как так не может? Проверь попробуй код на деле, я говорю то что есть. У меня именно так и записывает, как описал выше!

Вот еще раз весь код который щас имею: (правда пока что он имеет меня)
Код
--[[                            
                                  Название скрипта:  Saynick
              Версия скрипта: 1.0
                                  Версия API: API2
                                  Автор: Vicious
]]--

sBot = SetMan.GetString(21)    -- Имя бота
tNickam = {}
tNickpm = {}
function OnStartup()
    sFileam = Core.GetPtokaXPath().."scripts/Saynick/Nickam.tbl"
    sFilepm = Core.GetPtokaXPath().."scripts/Saynick/Nickpm.tbl"
    if loadfile(sFileam) and loadfile(sFilepm) then
        dofile(sFileam)
        dofile(sFilepm)
    end    
    TmrMan.AddTimer(1800000,"OnExit")
end

function OnExit()
    --WriteTable(tNicks, "saynick", sFile)
end

function UserConnected(tUser)
    --if tUser.iProfile == 0 then
        local sMsg = "$UserCommand 1 1 **УПРАВЛЕНИЕ\\*Сказать\\Использовать ник для AM$<%[mynick]> !addamnick %[line:Введите ник для AM]||"..
                "$UserCommand 1 1 **УПРАВЛЕНИЕ\\*Сказать\\Использовать ник для PM$<%[mynick]> !addpmnick %[line:Введите ник для PM]||"..
                "$UserCommand 1 1 **УПРАВЛЕНИЕ\\*Сказать\\Сбросить ники$<%[mynick]> !remnicks||"..                
                 "$UserCommand 1 2 **УПРАВЛЕНИЕ\\*Сказать\\Использовать этот ник для AM$<%[mynick]> !addamnick %[nick]||"..
                 "$UserCommand 1 2 **УПРАВЛЕНИЕ\\*Сказать\\Использовать этот ник для PM$<%[mynick]> !addpmnick %[nick]||"
        Core.SendToUser(tUser, sMsg)
    --end
end
OpConnected = UserConnected
RegConnected = UserConnected


function ChatArrival(tUser, sData)
    sData = string.sub(sData,1,-2)
    nick = tUser.sNick
    local _,_,cmd = string.find(sData, "%b<>%s+(%S+)")
    if cmd == "!addamnick" then
        local _,_,sNick = string.find(sData, "%b<>%s+%S+%s+(%S+)")
        if not sNick then
            Core.SendToUser(tUser, "<"..sBot.."> Вы не ввели ник!")
        else    
            if sNick ~= tUser.sNick then
                   tNickam[tUser.sNick] = sNick
                WriteTable(tNickam, "tNickam", sFileam)
            else
            Core.SendToUser(tUser, "<"..sBot.."> Этот ник у вас по умолчанию в настройках DC")
            end
            
        end
        return true
    end
end    

function WriteTable(tTable, tablename, file)
    local handle = io.open(file, "w")
    Serialize(tTable, tablename, handle)
      handle:close()
end

function Serialize(tTable, sTableName, hFile, sTab)
    sTab = sTab or "";
    hFile:write(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
            Serialize(value, sKey, hFile, sTab.."\t");
        else
            local sValue = (type(value) == "string") and string.format("%q",value) or tostring(value);
            hFile:write(sTab..'\t["'..nick..'"] = '..sValue);
        end
        hFile:write(",\n");
    end
    hFile:write(sTab.."}");
end
Go to the top of the page
+Quote Post
Setuper
сообщение 25.3.2009, 14:12
Сообщение #14


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Хаха.
Ну конечно у тебя будет повторяться, так как у тебя неправильно написана функция Serialize.

Это что за самодеятельность:
Код
hFile:write(sTab..'\t["'..nick..'"] = '..sValue);

Должно быть так:
Код
hFile:write(sTab.."\t"..sKey.." = "..sValue);


Функция Serialize предназначена для рекурсивной записи в файл. Её никогда нельзя изменять.
Go to the top of the page
+Quote Post
vicious
сообщение 25.3.2009, 14:58
Сообщение #15


Продвинутый участник
****

Группа: Пользователи
Сообщений: 173
Регистрация: 26.1.2009
Из: Saratov
Пользователь №: 1 965
Спасибо сказали: 7 раз




Спс!
Да я догадывался что все дело в ней, просто чес говоря вообще не знаю принцип работы этой функции, не дадите ссылку где есть описалово (желательно на русс, но если нет то и на англ сойдет)...
Заранее спасибо!
Go to the top of the page
+Quote Post
Wariner
сообщение 25.3.2009, 15:14
Сообщение #16


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




зачем новичку забивать себе этим голову. Для начало надо узнать структура таблиц и правильно научится с ними работать!
Go to the top of the page
+Quote Post
Setuper
сообщение 25.3.2009, 15:19
Сообщение #17


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




ссылка http://www.lua.ru/doc/ + файл scripting-interface.txt
Go to the top of the page
+Quote Post
vicious
сообщение 26.3.2009, 18:57
Сообщение #18


Продвинутый участник
****

Группа: Пользователи
Сообщений: 173
Регистрация: 26.1.2009
Из: Saratov
Пользователь №: 1 965
Спасибо сказали: 7 раз




Все...сделал вроде как, работает норм, хотя думаю не все в нем идеально))) . Спасибо всем, кто помогал. Скрипт выкладываю, проверяйте, говорите где недоработки и оишибки еще остались, буду исправлять.
Go to the top of the page
+Quote Post
Серый
сообщение 27.3.2009, 1:42
Сообщение #19


Начинающий
*

Группа: Пользователи
Сообщений: 14
Регистрация: 10.1.2009
Пользователь №: 1 752
Спасибо сказали: 0 раз




5+ Работает...пока нормал )) Спс!
Go to the top of the page
+Quote Post
vicious
сообщение 27.3.2009, 12:38
Сообщение #20


Продвинутый участник
****

Группа: Пользователи
Сообщений: 173
Регистрация: 26.1.2009
Из: Saratov
Пользователь №: 1 965
Спасибо сказали: 7 раз




Хм...вопросик вот, хочу улучшить скрипт.
Код
tNickam = {
    ["[len]vicious"] = "ухаха",
}


В данном коде tNickam["[len]vicious"] возвращает "ухаха"

Как мне получить само "[len]vicious"? (ессно это не tUser.sNick)
Go to the top of the page
+Quote Post

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

Collapse

> Похожие темы

  Тема Ответов Автор Просмотров Последнее сообщение
No New Posts KCAHDEP DDoS & Flood на "Озерки"
ВЫГНАТЬ В ШЕЮ!
0 Болото 6 208 2.12.2015, 4:09 Посл. сообщение: Болото
No New Posts Меню на хабе Ptoka 0.5.0.0
Свое меню с вызовом функций
4 daslex 8 368 17.11.2013, 15:05 Посл. сообщение: daslex
No new Topic has attachmentsDalliance ; старое название "Anekdot+BashOrg"
Скрипт выдаёт Анекдоты , Цитаты с с BashOrg , Интересные факты .
19 Vizunchik 19 176 14.6.2013, 9:10 Посл. сообщение: Ksan
Closed Topic has attachmentsАдмин меню
Админ меню под API2 для PtokaX 0.4.2.0
8 Strannik 12 107 24.3.2012, 14:36 Посл. сообщение: Strannik
Closed ВАЖНО: Topic has attachmentsКто У Нас Откуда :) Или "ты С Какого Района?"
Признаемся кто где живет)
81 Jaska 97 504 18.3.2012, 3:14 Посл. сообщение: HOUSE
Closed Адаптация игры "Мафия" с PtokaX на RusHub
9 Mangust 13 907 26.1.2012, 0:39 Посл. сообщение: dimajak
No New Posts Topic has attachmentsГолосование "Опросы"
Скрипт для проведения опросов
0 Vizunchik 5 725 9.12.2011, 23:45 Посл. сообщение: Vizunchik
No new Topic has attachmentsЦены На Тарифы Или "у Кого Инет Почем?"
Обсуждаем своих провайдеров.
66 D'aspid 71 346 7.9.2011, 20:57 Посл. сообщение: AfLc
No New Posts Скрипт для открытия сайта через меню хаба.
6 digor22 10 475 31.8.2011, 11:55 Посл. сообщение: Setuper
No New Posts контекстное меню для АДМИНА
12 drkrol 13 399 11.8.2011, 21:29 Посл. сообщение: dimajak
No New Posts Что дает "включение WEB-сервера"?
2 Angel_D 6 430 8.8.2011, 22:07 Посл. сообщение: Setuper
No new Обмен "DC блог <-> Хаб"
Информационный обмен
17 Otshelnik-Fm 19 916 3.5.2011, 1:44 Посл. сообщение: Otshelnik-Fm
No new Topic has attachmentsзахват символа "/"
символ / не ловится скриптом, перехватывается птокой
29 степашка 30 218 13.3.2011, 3:23 Посл. сообщение: Alexey
No new Topic has attachmentsСкрипт "Майор" Основан на "Подарки от деда мороза" API 2
Это мой первый скрипт не судите строго
14 Ferb 15 216 24.2.2011, 17:43 Посл. сообщение: Ferb
No new Topic has attachmentsСкрипт "Народная мудрость"
API2
17 HidDen 24 348 8.2.2011, 1:42 Посл. сообщение: Артём

 



RSS Сейчас: 3.5.2024, 23:07