Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

MyDC.ru _ Скрипты для RusHub'а _ Тексты

Автор: STRELOK 5.1.2010, 14:18

Название: Тексты
Версия: 2.0
Автор: STRELOK, Setuper(fixed)
lua плагин: 1.6
Версия хаба: 2.0.5
Описание: выводит содержимое текстовых файлов по команде.
Примечания:
Тексты лежат в папке texts
Изменения

Для работы скрипта необходимо скачать модуль files http://mydc.ru/index.html?showtopic=2937&view=findpost&p=25266

 Texts.rar ( 2.07 килобайт ) : 78
 

Автор: Wariner 5.1.2010, 14:23

А сможешь немного переделать скрипт чтобы не прописывать команду а по любой команде искал файл?

PS: на данном этапе думаю стоит указывать версию плагина и хаба!

Автор: STRELOK 5.1.2010, 14:57

Цитата(Wariner @ 5.1.2010, 16:23) *
А сможешь немного переделать скрипт чтобы не прописывать команду а по любой команде искал файл?

Попробую. Сейчас займусь big_smile.gif

UPD: Никак не могу додуматься, как взять название текстового файла за команду. Допустим есть файл rules.txt, надо взять его название, т.е. при вводе команды !rules, чтобы выводилось содержимое файла rules.txt, также и для других файлов. Если додумаюсь, то сегодня к вечеру может быть выложу, если нет, то жду помощи big_smile.gif

Автор: 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

Хаб ругается big_smile.gif
Цитата
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)
big_smile.gif

Автор: Setuper 9.1.2010, 21:35

Только ссылаться я дума нужно не на сам модуль, я на тему, так как в модули будут добавляться функции и модули будут перезаливаться, и соответственно ссылки на сами модули будут меняться. Поэтому ссылаемся на тему с модулями, а там уже в первом посту не сложно найти тот или иной модуль.

Я поправил ссылки))

Автор: STRELOK_IS74 9.3.2010, 14:15



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"



Прошу вас, выручайте ! still_dreaming.gif

Автор: 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

Заменил, спасибо, пока работает !

Данный мой КОД!

Код Text
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



Думаю с данным Кодом про работает долго ! big_smile.gif

Автор: 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

а так - к работоспособности скрипта нареканий нет. big_smile.gif

Автор: 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 по тому же шаблону.
спасибо за подсказку