Версия для печати темы
MyDC.ru _ Помощь по скриптам для PtokaX _ меню
Автор: Saymon 8.2.2010, 2:35
Видел на хабе озерки такое меню захотел к себе прикрутить. Скажите пожалуйста как сделать его.
пример
Меню хаба\\Информация для "..user.sNick.."\\Прислать меню
Нажимаешь - приходит сообщение "Меню было выслано"
И потом без переподключения на хаб уже это меню
Меню хаба\\Информация для "..user.sNick.."\\Партнёры
Меню хаба\\Информация для "..user.sNick.."\\FAQ
И тд..
Автор: evg 8.2.2010, 6:56
поидее при нажатии на "Прислать меню" выполняется команда
Цитата
Core.SendToNick(user.sNick, "$UserCommand 1 3 Меню хаба\\Информация для "..user.sNick.."\\Партнёры"||"))
и так далее.
За правильность не отвечаю, не проверял
Автор: Setuper 8.2.2010, 12:43
Да. Всё верно именно так и сделано. Очень грамотно сделано - отсылка меню по востребованию, а не каждый раз при входе.
Автор: Saymon 8.2.2010, 13:19
Попробовал не получилось
Парни обьясните плиз как к этому прикрутить
Код
sBot = SetMan.GetString(21)
HubName = SetMan.GetString(0)
tProfile = {
[-1] = 1, [0] = 1, [1] = 1, [2] = 1, [3] = 1, [4] = 1,
}
function UserConnected(user)
Core.GetUserAllData(user)
if tProfile[user.iProfile] == 1 then
Core.SendToNick(user.sNick,"$UserCommand 0 3|")
Core.SendToNick(user.sNick,"$UserCommand 1 3 Информация для "..user.sNick.."\\Поддержи наш проект\\Спонсоры$<%[mynick]> !спонсоры||")
Core.SendToNick(user.sNick,"$UserCommand 1 3 Информация для "..user.sNick.."\\Поддержи наш проект\\Реквизиты$<%[mynick]> !реквизиты||")
Core.SendToNick(user.sNick,"$UserCommand 1 3 Информация для "..user.sNick.."\\"..HubName.."\\Администрация хаба$<%[mynick]> !admins||")
Core.SendToNick(user.sNick,"$UserCommand 1 3 Информация для "..user.sNick.."\\"..HubName.."\\Благодарности юзерам$<%[mynick]> !благодарности||")
Core.SendToNick(user.sNick,"$UserCommand 1 3 Информация для "..user.sNick.."\\"..HubName.."\\О хабе$<%[mynick]> !хабинфо||")
Core.SendToNick(user.sNick,"$UserCommand 1 3 Информация для "..user.sNick.."\\"..HubName.."\\Сообщение от хаба$<%[mynick]> !meshub||")
Core.SendToNick(user.sNick,"$UserCommand 1 3 Информация для "..user.sNick.."\\"..HubName.."\\Правая оговорка$<%[mynick]> !pog||")
Core.SendToNick(user.sNick,"$UserCommand 1 3 Информация для "..user.sNick.."\\"..HubName.."\\Правила хаба$<%[mynick]> !правила||")
Core.SendToNick(user.sNick,"$UserCommand 1 3 Информация для "..user.sNick.."\\"..HubName.."\\История чата хаба$<%[mynick]> !weblog||")
Core.SendToNick(user.sNick,"$UserCommand 1 3 Информация для "..user.sNick.."\\"..HubName.."\\Статистика хаба$<%[mynick]> !webstat||")
Core.SendToNick(user.sNick,"$UserCommand 1 3 Информация для "..user.sNick.."\\"..HubName.."\\Сайт хаба$<%[mynick]> !сайт хаба||")
Core.SendToNick(user.sNick,"$UserCommand 1 3 Информация для "..user.sNick.."\\Партнёры / Друзья$<%[mynick]> !партнёры||")
end
end
OpConnected = UserConnected
RegConnected = UserConnected
Автор: Nickolya 8.2.2010, 13:42
1. Прикладывайте код в виде файла, так он не искажается
2. Я так понимаю меню удаляется и отправлется новое, подумайте над этим
3. Банальное логическое задание
4. Нужен обработчик команды отсылки меню
5. И простая функция работающая по получению команды от юзеру, аналогичная отправке меню при входе
6. Все просто, попробуйте сами сделать, давно уже в этом деле, надо лишь подумать как сделать
Автор: Артём 8.2.2010, 16:37
Saymon всё бы хорошо, но если ещё пару раз отослать менюшку то получается матрёшка, а нужно чтоб только один раз отсылало, а во второй раз "Вы уже получили меню"
Автор: Saymon 8.2.2010, 16:45
оу.. а вот с этим... я честно говоря не знаю
С матрёшкой ты к сожелению прав. Не заметил но после нескольких отсылок белеберда
Вот как бы теперь сделать чтобы нельзя было несколько раз тыкать или на последующие разы выходило типа "Ошибка, Меню уже было вам выслано."
Что бы снова можно было воспользоватся командой получить меню нужно переподключится на хаб.
И странно заметил что меню то высылается то нет.
Автор: ustas 8.2.2010, 20:24
пробуй
tset1.lua ( 6.02 килобайт )
: 30
Автор: Saymon 8.2.2010, 20:36
Спасибо но это тоже самое что и пару постами выше.
Код
Core.SendToUser(user, "<"..sBot.."> Меню уже было отправлено.")
это сообщение не выводится
И меню несколько раз отправляется
Автор: Wariner 8.2.2010, 22:01
ещё одна мазня на пробу)))
Автор: Saymon 8.2.2010, 22:24
Wariner
на птоке 0412 ошибка
[22:21] Синтаксис C:\SERVER\trance\scripts\menu.lua:12: attempt to index global 'user' (a nil value)
Автор: prapor 8.2.2010, 23:47
Цитата(Saymon @ 8.2.2010, 22:24)
Warinerна птоке 0412 ошибка
[22:21] Синтаксис C:\SERVER\trance\scripts\menu.lua:12: attempt to index global 'user' (a nil value)
Исправь все строчки с user.sNick на tUser.sNick
Автор: Saymon 9.2.2010, 0:15
Это я изначально пробовал
[00:15] Синтаксис C:\SERVER\trance\scripts\menu.lua:12: attempt to index global 'tUser' (a nil value)
Автор: prapor 9.2.2010, 0:43
Я убрал tUser.sNick из меню, скрипт заработал, меню присылается, но после переподключения к хабу меню не присылается, пишет мол уже выслано)
думаю к нему нужно прикрепить функцию OnExit
Автор: Saymon 9.2.2010, 0:47
Странно, я сразу изменил и ошибка!
Автор: Wariner 9.2.2010, 9:41
дубль два
Автор: Артём 9.2.2010, 12:35
и второй дубль не удачный , команду в чат пропускает, а ошибок нет.
Автор: Nickolya 9.2.2010, 12:54
1. Спецсимволы в регулярках надо экранировать:
Код
local sCmd = sData:match"^%b<>%s+[!+-/*](%S+)"
потом действие
Код
local sData = sData:sub(1,-2)
немного лишнее если все учесть в регулярке, а вообще надо бы написать проще:
Код
function ChatArrival(tUser, sData)
local sCmd = sData:match"^%b<>%s+%p(%S+).*|"
if sCmd == "usermenu" then
Мое замечание о команде удаления меню было проигнорировано, а зря
На сколько я помню это команда
Код
$UserCommand 255 15
Единственное, это снесет все меню, но на озерках это грамотно учтено т.к. меню не разбросано по скриптам а все в 1 боте
Можно попробовать указать меню как аргумент, но не знаю получится ли, протестируйте, потом отпишите как, к примеру
Код
$UserCommand 255 15 Информация для "..tUser.sNick.."\\$|"
или
Код
$UserCommand 255 15 Информация для "..tUser.sNick.."$|"
Автор: Wariner 9.2.2010, 21:28
насчёт регулярок, просто когда на скорую руку пишешь не углубляешься так))))
а по поводу команды очистки так это надо все скрипты перерывать.....
не знаю почему у вас не работает... у меня всё пашет. подправил вывод ника в меню и проверил работу. двигайте в списке скриптов)))
Автор: Saymon 9.2.2010, 22:11
Wariner, Спасибо огромнейшее. Отлично работает
Автор: Nickolya 10.2.2010, 12:27
Wariner, я тоже над этим думал, а команда удаления конкретного меню не протестирована? А то у меня пока нет возможности попробовать.
Мне пришло в голову вот что: можно переделать все скрипты под эту технологию, и при получении этой команды не возвращать true чтобы команда шла по всем скриптам, а в самом конце списка скриптов сделать скрипт-заглушку которая будет блокировать вывод команды в чат, но это так, идея для тех кто знает как делать, в практику я думаю на птоке это не войдет.
Автор: DrakonSP 13.2.2010, 15:03
Не плохо было бы если меню "Прислать меню" исчезало после отправки меню.
Автор: Wariner 13.2.2010, 17:41
Цитата(Nickolya @ 9.2.2010, 12:54)
Мое замечание о команде удаления меню было проигнорировано, а зря
На сколько я помню это команда
Код
$UserCommand 255 15
Единственное, это снесет все меню, но на озерках это грамотно учтено т.к. меню не разбросано по скриптам а все в 1 боте
Можно попробовать указать меню как аргумент, но не знаю получится ли, протестируйте, потом отпишите как, к примеру
Код
$UserCommand 255 15 Информация для "..tUser.sNick.."\\$|"
или
Код
$UserCommand 255 15 Информация для "..tUser.sNick.."$|"
она стирает все меню или я что то не правильно сделал.....
PS: поэтому убрать меню для получении менюшки нельзя!
Автор: *FoxMalder* 28.2.2010, 11:53
помогите скрестить этот скрипт
332.txt ( 1.27 килобайт )
: 21
с http://mydc.ru/ipb.html?act=attach&type=post&id=4050 который сделал Wariner )
Автор: TiGRpp 1.3.2010, 22:21
Цитата(Wariner @ 9.2.2010, 22:28)
насчёт регулярок, просто когда на скорую руку пишешь не углубляешься так))))
а по поводу команды очистки так это надо все скрипты перерывать.....
не знаю почему у вас не работает... у меня всё пашет. подправил вывод ника в меню и проверил работу. двигайте в списке скриптов)))
Спасибо, работает на Птохе 4.1.2 .
В отношении удаления меню - пока не накопил опыта использования того, что есть...
Но вот потребовалось сделать вариант отсылки одного и того же меню, но на разных языках...полагаю тупо поставить пару этих скриптов параллельно. Возьметесь доработать этот, чтобы не городить ничего?