Вопросы по скриптам, Мелкие вопросы |
Здравствуйте, гость ( Вход | Регистрация )
Вопросы по скриптам, Мелкие вопросы |
18.2.2010, 1:24
Сообщение
#1
|
|
Продвинутый участник Группа: Пользователи Сообщений: 107 Регистрация: 23.11.2008 Из: Сергиев Посад Пользователь №: 1 178 Спасибо сказали: 9 раз |
Раскрывающийся текст Код local sPath = Core.GetPtokaXPath().."scripts/TextBot/" function ChatArrival(tUser, sData) local sCmd = sData:match"%b<>%s+%p(%S+).*|" if sCmd then Core.SendToUser(tUser, OpenTextFile(sCmd)) return true end end function OpenTextFile(sCmd) local sMessage = "" local bBinary = bBinary or false local sFile = io.open(sPath..sCmd..".txt", "r") if sFile then sMessage = sFile:read("*all") sFile:close() end return sMessage end Всё ли правильно в этом скрипте? Написал. Работает. Но не уверен, что тут всё верно. Гляньте плиз |
|
|
18.2.2010, 2:22
Сообщение
#2
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Я бы вот так написал :
Код local sPath = Core.GetPtokaXPath().."scripts/TextBot/"
function ChatArrival(tUser, sData) local sCmd = sData:match"^%b<>%s+%p(%S+).*|$" if sCmd then local sMsg = LoadText(sPath..sCmd..".txt") if sMsg then Core.SendToUser(tUser, sMsg) return true end end end function LoadText(sFile) local hFile = io.open(sFile) if hFile then local sMsg = hFile:read"*a" sMsg = sMsg:gsub("&#(%d+);", "&#%1;") sMsg = sMsg:gsub("|", "|") sMsg = sMsg:gsub("^%$", "$") hFile:flush() hFile:close() return sMsg end return nil, "Не удалось открыть файл "..sFile end |
|
|
18.2.2010, 6:19
Сообщение
#3
|
|
Продвинутый участник Группа: Пользователи Сообщений: 107 Регистрация: 23.11.2008 Из: Сергиев Посад Пользователь №: 1 178 Спасибо сказали: 9 раз |
При отображении в клиенте на конце текста прописываеться $
|
|
|
18.2.2010, 11:32
Сообщение
#4
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Пардон. В строке:
Код sMsg = sMsg:gsub("^%$", "$") знак $ нужно заэкранировать.Твой скрипт тоже работает. Однако, особенности протокола заставляют нас обходить некоторые знаки. Например, в твоём скрипте: 1) пользователям не отсылались бы сообщения, начинающиеся со знака $; 2) знак | в сообщении служил бы разделителем команд и не отображался бы в чате, а всё что шло после этого знака отсылалось бы в следующей команде; 3) любые цифры от 1 до 255, перед которыми стояли бы символы &#, и после которых стоял бы символ ;, преобразовывались бы из кодов в некоторые символы перед тем как поступить в чат пользователя. |
|
|
20.2.2010, 10:38
Сообщение
#5
|
|
Продвинутый участник Группа: Пользователи Сообщений: 107 Регистрация: 23.11.2008 Из: Сергиев Посад Пользователь №: 1 178 Спасибо сказали: 9 раз |
А возможно ли для этого скрипта
TextBot.lua ( 657 байт ) Кол-во скачиваний: 10 Сделать следующую фичу: Чтобы в текством файле указывать например [views] А пользователю отображалось количество просмотров данной темы (текстового файла) Что то вроде как в MOTD в скрипте StatPX, только вместо всяких рекордов пользователей было количество просмотров. |
|
|
20.2.2010, 11:49
Сообщение
#6
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Можно.
Можно сделать показ количества просмотров за время непрерывной работы скрипта, тогда можно просто завести переменную-счётчик, в противном случае (в общем случае) нужно будет сохранение счётчика в файл. TextBot.lua ( 1.61 килобайт ) Кол-во скачиваний: 22 |
|
|
20.2.2010, 12:13
Сообщение
#7
|
|
Продвинутый участник Группа: Пользователи Сообщений: 107 Регистрация: 23.11.2008 Из: Сергиев Посад Пользователь №: 1 178 Спасибо сказали: 9 раз |
Лучше в файл Если не затруднит + ошибка
Цитата TextBot.lua:10: bad argument count to 'SendToUser' (2 expected, got 3)
|
|
|
20.2.2010, 12:26
Сообщение
#8
|
|
Site Reliability Engineer Группа: Модераторы Сообщений: 1 772 Регистрация: 27.6.2009 Из: Чувашия, г. Чебоксары Пользователь №: 3 719 Спасибо сказали: 479 раз |
У меня тоже маленький вопросик будет
Как реализовать запись юзеров онлайн и общий объём шары хаба на изображение? Знаю только что для этого нужна библиотека luagd. |
|
|
20.2.2010, 15:33
Сообщение
#9
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Исправил. Залил.
|
|
|
20.2.2010, 17:02
Сообщение
#10
|
|
Продвинутый участник Группа: Пользователи Сообщений: 107 Регистрация: 23.11.2008 Из: Сергиев Посад Пользователь №: 1 178 Спасибо сказали: 9 раз |
Плиз плиз сделайте что бы он количество просмотров в файл сохранял.
|
|
|
20.2.2010, 17:15
Сообщение
#11
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Минутное дело)) Перезалил.
|
|
|
20.2.2010, 17:54
Сообщение
#12
|
|
Продвинутый участник Группа: Пользователи Сообщений: 107 Регистрация: 23.11.2008 Из: Сергиев Посад Пользователь №: 1 178 Спасибо сказали: 9 раз |
|
|
|
20.2.2010, 18:01
Сообщение
#13
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Пардон.
Вот так нужно: Код SaveTable(sFile, tCounts, "tCounts") Второй параметр в кавычки Перезалил |
|
|
22.2.2010, 13:31
Сообщение
#14
|
|
Site Reliability Engineer Группа: Модераторы Сообщений: 1 772 Регистрация: 27.6.2009 Из: Чувашия, г. Чебоксары Пользователь №: 3 719 Спасибо сказали: 479 раз |
Есть код
Код function OnStartup() sFile = Core.GetPtokaXPath().."scripts/HelpFiles/help.txt" if loadfile(sFile) then dofile(sFile) end function ChatArrival(user, sData) local cmd = sData:match"%b<>%s+(%S+).*|" if cmd == "!help" or cmd == "!хелп" or cmd == "+help" then Core.SendToUser(user, " ") return true end end end Как правильно сделать что бы функция Core.SendToUser(user, " ") выводила содержимое файла help.txt ? |
|
|
22.2.2010, 14:12
Сообщение
#15
|
|
Developer Группа: Модераторы Сообщений: 541 Регистрация: 11.11.2008 Пользователь №: 1 075 Спасибо сказали: 244 раза |
Код sBot = SetMan.GetString(21)
sFile = Core.GetPtokaXPath().."scripts/HelpFiles/help.txt" function ChatArrival(tUser, sData) sData = string.sub(sData,1,-2) local sCmd = sData:match"%b<>%s+[!+*](%S+)" if sCmd == "help" or sCmd == "хелп" then Core.SendToUser(tUser, "<"..sBot.."> "..LoadText(sFile)) return true end end function LoadText(filename) local message = "" local f = io.open( filename, "r" ) if f then message=f:read("*all") message=string.gsub(message,"|","") f:close() end return message end |
|
|
22.2.2010, 16:20
Сообщение
#16
|
|
Site Reliability Engineer Группа: Модераторы Сообщений: 1 772 Регистрация: 27.6.2009 Из: Чувашия, г. Чебоксары Пользователь №: 3 719 Спасибо сказали: 479 раз |
Что не так тут не пойму?
Код local sCmd = sData:match"%b<>%s+[!+](%S+)" if sCmd == "команда" or cmd == "команда2" or cmd == "команда3" then Как правильней будет сделать? |
|
|
22.2.2010, 16:23
Сообщение
#17
|
|
Developer Группа: Модераторы Сообщений: 541 Регистрация: 11.11.2008 Пользователь №: 1 075 Спасибо сказали: 244 раза |
Код if sCmd == "команда" or sCmd == "команда2" or sCmd == "команда3" then
|
|
|
22.2.2010, 16:29
Сообщение
#18
|
|
Site Reliability Engineer Группа: Модераторы Сообщений: 1 772 Регистрация: 27.6.2009 Из: Чувашия, г. Чебоксары Пользователь №: 3 719 Спасибо сказали: 479 раз |
Хм, всё равно не работает
Код local sCmd = sData:match"%b<>%s+[!+](%S+)"
if sCmd == "команда" or sCmd == "команда2" or sCmd == "команда3" then |
|
|
22.2.2010, 16:39
Сообщение
#19
|
|
Developer Группа: Модераторы Сообщений: 541 Регистрация: 11.11.2008 Пользователь №: 1 075 Спасибо сказали: 244 раза |
Может дело в латинских символах?
Код if sCmd == "command" or sCmd == "command2" or sCmd == "command3" then
|
|
|
22.2.2010, 16:45
Сообщение
#20
|
|
Site Reliability Engineer Группа: Модераторы Сообщений: 1 772 Регистрация: 27.6.2009 Из: Чувашия, г. Чебоксары Пользователь №: 3 719 Спасибо сказали: 479 раз |
да нет, вообще что то только так идёт.
Код local sCmd = sData:match"%b<>%s+(%S+).*|" -- if cmd == "!command" or cmd == "!команда" or cmd == "!command2" then Не могу понять почему... И ошибок в птоке нет. |
|
|
Похожие темы
|
Сейчас: 23.11.2024, 8:42 |