Версия для печати темы
MyDC.ru _ Скрипты для RusHub'а _ Тексты
Автор: STRELOK 5.1.2010, 14:18
Название: Тексты
Версия: 2.0
Автор: STRELOK, Setuper(fixed)
lua плагин: 1.6
Версия хаба: 2.0.5
Описание: выводит содержимое текстовых файлов по команде.
Примечания:
Тексты лежат в папке texts
Изменения
Версия 2.0:
- Добавил дополнительные возможности, такие как: Получение названия хаба, его портов, Макс. и мин. длинна ника
Версия 1.4:
- Вновь исправлена ошибка в регулярном выражении. Команда /me не пропукалась в чат © STRELOK
Версия 1.3:
- Исправлен путь до папки texts в связи с выходом новой версии RusHub'а © STRELOK
Версия 1.2:
- Исправлена ошибка в регулярном выражении. (В чат не пропускались некоторые смайлы) (с) STRELOK
Версия 1.1:
- Функция LoadText перенесена в модули © STRELOK
- Теперь скрипт ищит текстовый файл по любой введёной команде, если текстовый файл есть, его содержимое отобразится, если его нет, то функция возвращает nil © Serx
Для работы скрипта необходимо скачать модуль files http://mydc.ru/index.html?showtopic=2937&view=findpost&p=25266
Автор: Wariner 5.1.2010, 14:23
А сможешь немного переделать скрипт чтобы не прописывать команду а по любой команде искал файл?
PS: на данном этапе думаю стоит указывать версию плагина и хаба!
Автор: STRELOK 5.1.2010, 14:57
Цитата(Wariner @ 5.1.2010, 16:23)
А сможешь немного переделать скрипт чтобы не прописывать команду а по любой команде искал файл?
Попробую. Сейчас займусь
UPD: Никак не могу додуматься, как взять название текстового файла за команду. Допустим есть файл
rules.txt, надо взять его название, т.е. при вводе команды
!rules, чтобы выводилось содержимое файла
rules.txt, также и для других файлов. Если додумаюсь, то сегодня к вечеру может быть выложу, если нет, то жду помощи
Автор: Serx 5.1.2010, 16:59
не проверял :( просто навскидку попробовал сообразить:
Код
bot = "БОТ"
folder = Core.GetMainDir().."texts/"
function OnChat(UID, sData)
local sCmd = sData:match"%b<>%s+%p(%S+)"
if sCmd then
Core.SendToUser(UID, LoadText(sCmd), bot)
return true
end
end
function LoadText(sCmd)
local sMessage = ""
local sFile = io.open(folder..sCmd..".txt", "r" )
if sFile then
sMessage = sFile:read("*all")
sFile:close()
end
return sMessage
end
Автор: Wariner 5.1.2010, 17:18
ну да почти))) но лучше наверно так
Код
local sBot = "boT"
local sPath = Core.GetMainDir().."texts/"
function OnChat(UID, sData)
local sCmd = sData:match"%b<>%s+[!+-/*](%S+)"
local bFile sMsg = LoadText(sPath..sCmd..".txt")
if bFile then
Core.SendToUser(UID, sMsg, sBot)
return true
end
end
function LoadText(sFileWay)
local sMessage = ""
local sFile = io.open(sFileWay, "r" )
if sFile then
sMessage = sFile:read("*all")
sFile:close()
return true sMessage
else
return nil
end
end
думаю позже этот скрипт надо будет разделить и функцию чтения текстового файла убрать в модули
Автор: Setuper 5.1.2010, 18:14
Разумно вообще сделать отдельный модуль с часто используемыми функциями, чтобы по 10 раз не переписывать один и тот же код.
Из данного скрипта в модуль нужно запихнуть функцию LoadText. А также в модуль следует пихнуть такие функции как: Serialize, сохранение таблиц, всякие форматирования шары и тд.
Автор: STRELOK 6.1.2010, 10:14
Добавлена Версия 1.2:
- Исправлена ошибка в регулярном выражении. (В чат не пропускались некоторые смайлы)
Автор: Wariner 6.1.2010, 10:29
Цитата(STRELOK @ 5.1.2010, 14:18)
если текстовый файл есть, его содержимое отобразится, если его нет, то функция возвращает nil © Serx
написано красиво, но так делает мой вариант. а то что в первом посту на мой взгляд не работает так...
Автор: STRELOK 6.1.2010, 10:48
Цитата(Wariner @ 6.1.2010, 12:29)
написано красиво, но так делает мой вариант. а то что в первом посту на мой взгляд не работает так...
Эту функцию убрал в версии 1.2. Т.к.:
Код
return true sMessage
else
return nil
Хаб ругается
Цитата
error loading module 'texts' from file '...\Hub\libs\texts.lua':
...\Hub\libs\texts.lua:9: 'end' expected (to close 'function' at line 1) near 'sMessage'
Автор: Wariner 6.1.2010, 10:53
запятая пропущена
Код
return true, sMessage
else
return nil
Автор: STRELOK 6.1.2010, 10:59
Код
.../Desktop/Hub/scripts/texts.lua:18: attempt to concatenate global 'sPath' (a nil value)
Автор: Setuper 9.1.2010, 21:35
Только ссылаться я дума нужно не на сам модуль, я на тему, так как в модули будут добавляться функции и модули будут перезаливаться, и соответственно ссылки на сами модули будут меняться. Поэтому ссылаемся на тему с модулями, а там уже в первом посту не сложно найти тот или иной модуль.
Я поправил ссылки))
Автор: STRELOK_IS74 9.3.2010, 14:15
Версия 2.0:
- Добавил дополнительные возможности, такие как: Получение названия хаба, его портов, Макс. и мин. длина ника
upd: те, кто успел скачать предшествующий архив, просьба, перекачать архив с первого поста. Была исправлена одна мелкая ошибка.
Автор: TiGRpp 26.12.2010, 7:03
В Windows версия 1.3 работает без проблем.
В Убунте этот скрипт запустился, когда закомментировал:
Код
--require "files"
Однако текст из файла не выдает...ошибка:
Код
texts.lua:39: attempt to index global 'Files' (a nil value)
Включил последнюю версию 2.0 - не находит папки с текстовыми файлами:
Код
[07:13:02] <LuaErrors> Ошибка в скрипте: texts.lua: /etc/rushub/scripts/texts.lua:21: module 'files' not found: no field package.preload['files']
no file '/etc/rushub/libs/files.lua'
no file '/etc/rushub/libs/files/init.lua'
no file '/etc/rushub/files.lua'
no file '/etc/rushub/files/init.lua'
no file '/etc/rushub/scripts/files.lua'
no file '/etc/rushub/scripts/files/init.lua'
no file '/etc/rushub/plugins/files.lua'
no file '/etc/rushub/plugins/files/init.lua'
no file '/etc/rushub/scripts/libs/files.lua'
no file '/etc/rushub/scripts/libs/files/init.lua'
no file './files.lua'
no file '/usr/local/share/lua/5.1/files.lua'
no file '/usr/local/share/lua/5.1/files/init.lua'
no file '/usr/local/lib/lua/5.1/files.lua'
no file '/usr/local/lib/lua/5.1/files/init.lua'
no file '/usr/share/lua/5.1/files.lua'
no file '/usr/share/lua/5.1/files/init.lua'
no file '/etc/rushub/libs/files.so'
no file '/etc/rushub/files.so'
no file '/etc/rushub/scripts/files.so'
no file '/etc/rushub/plugins/files.so'
no file '/etc/rushub/scripts/libs/files.so'
no file './files.so'
no file '/usr/local/lib/lua/5.1/files.so'
no file '/usr/lib/lua/5.1/files.so'
no file '/usr/local/lib/lua/5.1/loadall.so'
Вариант Warinera с поправкой
Код
local sPath = Core.sMainDir.."texts/"
ошибок не дает, но содержимое текстового файла не выводит...команда проходит в чат.
Автор: Herurg 26.12.2010, 8:11
Ошибка в 26 строке.
Код
[Sun Dec 26 11:03:05 2010] /etc/rushub/scripts/texts.lua:26: attempt to index a nil value
в файле texts.lua 26 строка:
Код
local sText = Files.LoadText(sPath..sCmd..".txt"):gsub("%[(%S+)%]", {
Автор: Sekretchik 27.12.2010, 15:50
Сменил
Код
local sPath = Core.sMainDir.."texts/"
на
Код
local sPath = Core.sScriptsDir.."texts/"
тексты подгрузились.
Автор: TiGRpp 27.12.2010, 16:10
Мне Артем прислал версию 2.0 этого скрипта, возможно с редакцией.
Скрипт запускается, тексты выводит, но очень долго! И в Win, и под Линуксом.
Надо рыть какой параметр в конфиге определяет этот период.
Автор: Sekretchik 27.12.2010, 22:28
Вполне вероятно из-за размера самих текстовых файлов которые запрашиваешь
Автор: CrazyKiller 11.5.2011, 20:24
Ребят, не могу решить проблему в скрипте !
Пишет в логе !
[Wed May 11 20:13:47 2011] c:/RusHub/scripts/texts.lua:10: unexpected symbol near '='
менял я
Код
local sPath = Core.sMainDir.."texts/"
На
Код
local sPath = Core.sScriptsDir.."texts/"
Не помогло, что может быть ?
Автор: CrazyKiller 13.5.2011, 23:01
Ребят серьёзна, прошу помощи, скрипт падает сам по себе, не могу понять из за чего он падает, приходится в ручную запускать его постоянно !
в Логе пишет Ошибку на Строку !
Лог
Код
/scripts/texts.lua:8: attempt to index a nil value
Строка под номером 8
Код
local sText = Files.LoadText(sPath..sCmd..".txt"):gsub("%[(%S+)%]", {
Список Скриптов в Хабе, так прописаны в скриптах !
Код
"BanManager.lua"
"ChatFilter.lua"
"chathist.lua"
"ContextMenu.lua"
"CountGraphic.lua"
"FirstRusHubBot.lua"
"hideme.lua">
"Informer.lua"
"messenger.lua"
"noCAPS.lua"
"Records.lua"
"Reports.lua"
"scripts.lua"
"texts.lua"
Прошу вас, выручайте !
Автор: Setuper 13.5.2011, 23:26
Код
function OnChat(UID, sData)
local sCmd = sData:match"%b<>%s+[!+*](%S+)"
if sCmd then
local sText = Files.LoadText(sPath..sCmd..".txt")
if sText then
sText = sText:gsub("%[(%S+)%]", {
HubName = Core.GetConfig("sHubName"),
NickMixLen = Core.GetConfig("iMinNickLen"),
NickMaxLen = Core.GetConfig("iMaxNickLen"),
Port = Core.GetConfig("iMainPort"),
SubPorts = Core.GetConfig("sSubPorts"),
Language = Core.GetConfig("sLocale"),
HubBot = Core.GetConfig("sHubBot"),
})
Core.SendToUser(UID, sText, sBot, sBot)
return true
end
end
end
Автор: CrazyKiller 13.5.2011, 23:30
Заменил, спасибо, пока работает !
Данный мой КОД!
local sBot = Core.GetConfig("sHubBot")
local sPath = Core.sScriptsDir.."texts/"
local sMenu = ""
require "files"
function OnChat(UID, sData)
local sCmd = sData:match"%b<>%s+[!+*](%S+)"
if sCmd then
local sText = Files.LoadText(sPath..sCmd..".txt")
if sText then
sText = sText:gsub("%[(%S+)%]", {
HubName = Core.GetConfig("sHubName"),
NickMixLen = Core.GetConfig("iMinNickLen"),
NickMaxLen = Core.GetConfig("iMaxNickLen"),
Port = Core.GetConfig("iMainPort"),
SubPorts = Core.GetConfig("sSubPorts"),
Language = Core.GetConfig("sLocale"),
HubBot = Core.GetConfig("sHubBot"),
})
Core.SendToUser(UID, sText, sBot, sBot)
return true
end
end
end
function ContextMenu(UID)
Core.SendToUser(UID, sMenu)
Core.SendToUser(UID,"$UserCommand 1 3 .::Главное Меню::.\\.::Правила::.$<%[mynick]> !rules |")
Core.SendToUser(UID,"$UserCommand 1 3 .::Главное Меню::.\\.::Друзья Хаба::.$<%[mynick]> !hubs |")
Core.SendToUser(UID,"$UserCommand 1 3 .::Главное Меню::.\\.::Soft От Хаба::.$<%[mynick]> !sb |")
Core.SendToUser(UID,"$UserCommand 1 3 .::Главное Меню::.\\.::FAQ::.$<%[mynick]> !faq |")
Core.SendToUser(UID,"$UserCommand 1 3 .::Главное Меню::.\\.::Ресурсы Сети Triolan::.$<%[mynick]> !res |")
Core.SendToUser(UID,"$UserCommand 1 3 .::Главное Меню::.\\.::Администрация Хаба::.$<%[mynick]> !priv |")
end
Думаю с данным Кодом про работает долго !
Автор: Dimon21 8.6.2011, 10:45
STRELOK у меня ежечастно вылетает такая ошибка RusHub 2.3.2/scripts/texts.lua:26: attempt to index a nil value.
Автор: Accelerator 8.6.2011, 11:10
Ссылка на фикс http://mydc.ru/topic2915.html?view=findpost&p=38944.
Аттач перезалил с исправленной версией (спасибо Setuper)
Автор: Dimon21 9.6.2011, 3:48
Надо сменить HubName = Core.GetConfig("sHubName") на HubName = Config.sHubBot
Автор: Angel_D 13.9.2011, 8:44
Опять таки - Win RussHub 2.3.6
Цитата
[Tue Sep 13 08:27:23 2011] C:/Program Files/RusHub/scripts/texts.lua:32: warning: function 'GetConfig' was deprecated. Use 'Config[sName]' instead
[Tue Sep 13 08:27:23 2011] C:/Program Files/RusHub/scripts/texts.lua:33: warning: function 'GetConfig' was deprecated. Use 'Config[sName]' instead
[Tue Sep 13 08:27:23 2011] C:/Program Files/RusHub/scripts/texts.lua:34: warning: function 'GetConfig' was deprecated. Use 'Config[sName]' instead
[Tue Sep 13 08:27:23 2011] C:/Program Files/RusHub/scripts/texts.lua:35: warning: function 'GetConfig' was deprecated. Use 'Config[sName]' instead
а так - к работоспособности скрипта нареканий нет.
Автор: Accelerator 13.9.2011, 10:37
Код
local sBot = Core.GetConfig("sHubBot")
заменить на
Код
local sBot = Config[sHubBot]
Автор: Angel_D 13.9.2011, 16:57
Цитата
при перезапуске скрипта "texts.lua " произошла ошибка:.../RusHub/scripts/texts.lua:18: bad argument #2 to 'Config' (string expected, got nil)
разобрался.
добавил "ковычки" вокруг sHubBot и заменил остальные
Core.GetConfig на
Config по тому же шаблону.
спасибо за подсказку