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

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

MyDC.ru _ Сетевые скрипты [PtokaX] _ Интересные факты

Автор: dimajak 16.2.2011, 22:52

Интересные факты

Название: facts_api2
Версия API: API2
Автор: dimajak

Цитаты с сайта webdiscover.ru
Сваял, как говорится "на коленке". Это не реклама сайта, просто наткнулся на страничку, где выводились факты, через пару дней наткнулся на описание библиотеки http://mydc.ru/topic43.html. Решил их подружить. big_smile.gif

Для работы скрипта необходимы библиотеки http://mydc.ru/topic43.html.

Доступные настройки:
sBot - имя бота (Факты)
TmrTime - периодичность вывода фактов, в минутах (15)


Скачать:
 facts_api2.lua ( 796 байт ) : 351


Еще одна версия скрипта с поддержкой MySQL.
Теперь факты сохраняются в БД и повторы не выводятся. Дается 10 попыток запроса для неповторяющегося факта.

Для работы скрипта необходимы библиотеки http://mydc.ru/topic1508.html.

Скачать:  facts_mysql_api2.lua ( 2.68 килобайт ) : 152

Автор: OVERLORD1979 17.2.2011, 6:24

и как им пользаватся? не менюшки не команд...ошибки тоже нет...или он автоматически каждые 15 минут сам выдаёт?

Автор: npocToNIK 17.2.2011, 12:22

Цитата(OVERLORD1979 @ 17.2.2011, 7:24) *
и как им пользаватся? не менюшки не команд...ошибки тоже нет...или он автоматически каждые 15 минут сам выдаёт?


да автоматически , каждые 15 минут. у меня всё отлично работает )

Автор: Marc 17.2.2011, 13:58

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

Автор: dimajak 18.2.2011, 23:39

Решил прикрутить БД в MySQL чтобы факты "впустую" не выводились. big_smile.gif
Теперь факты сохраняются в БД, при этом повторы не сохраняются в БД, и не выводятся в чат. Дается 10 попыток для вывода неповторяющегося факта.
Добавились настройки для работы с MySQL.
БД с фактами можно будет использовать, например, на своем сайте. Т.е. скрипт будет накапливать факты в БД, одновременно информируя посетителей хаба, а на сайте вы сможете выводить случайный факт из этой БД, развлекая уже посетителей сайта.
ПыСы. В моей БД уже более 400 фактов.

Автор: KCAHDEP 3.5.2012, 8:18

Спасибо за хороший скрипт, все работает ошибок не выводит сообщения не повторяются, только вот последнюю букву в предложении съедает постоянно shocked.gif
http://mydc.ru/r/?http://shot.qip.ru/008pDF-2Dbzb2qBd/

Автор: dimajak 3.5.2012, 15:15

Цитата(KCAHDEP @ 3.5.2012, 9:18) *
Спасибо за хороший скрипт, все работает ошибок не выводит сообщения не повторяются, только вот последнюю букву в предложении съедает постоянно shocked.gif
http://mydc.ru/r/?http://shot.qip.ru/008pDF-2Dbzb2qBd/

Это я символ точки "проглатывал", наверное big_smile.gif
Код
fd = string.sub(fd,1,string.len(fd)-2)
2 заменить на 1.

Автор: KCAHDEP 3.5.2012, 19:24

Цитата(dimajak @ 3.5.2012, 16:15) *
Это я символ точки "проглатывал", наверное big_smile.gif
Код
fd = string.sub(fd,1,string.len(fd)-2)
2 заменить на 1.


Спасибо помогло victory.gif

Автор: KCAHDEP 27.5.2012, 11:48

перестало выводить факты, никаких ошибок нету... вариант с мускулом.

Автор: MIKHAIL 6.3.2014, 23:10

Часть кода из скрипта facts_mysql_api2.lua:

Код
...
if flag then
    Core.SendToAll("<"..sBot.."> "..fd)
    break
end
...

Изначально зачем здесь оператор break, какая роль ему отведена? Проверил – и без него тоже работает.

Автор: Ksan 7.3.2014, 5:57

MIKHAIL,
А вы проследите работу цикла, начинающегося с

Код
while schet < 10  and not flag do
и поймёте.
Бонус: команда break применяется для останова и выхода из цикла до выполнения изначальных условий (они в той строке, которую я привёл выше).
Хотя я подозреваю, что можно было не and not flag do, а or not flag do и обойтись без break (цикл автоматом завершился бы после первого же появления значения true для булевой переменной flag, отправив в чат сообщение и дойдя до end уровня while).
Это моё imho, возможно, у автора есть иное мнение.. big_smile.gif

Автор: MIKHAIL 8.3.2014, 2:10

Ksan, не сообразил я, что break применяется для останова и выхода из цикла.
Проследил, и, кстати, при конструкции and not flag do наличие break не обязательно, а вот при or not flag do – обязательно.

Автор: Devil_Blood 6.8.2014, 11:28

ребята на PtokaX 0.5.0.2 на x64 выводит вместо текста бра-кодабру

Автор: Marc 8.8.2014, 1:33

Devil_Blood
Да, есть такое дело!
Надо править кодировку в скрипте видимо, чтобы шёл русский язык.
Видно изменение на сайте произошло у них! Просить надо знающих людей теперь!

Автор: Ksan 8.8.2014, 13:11

Marc, Devil_Blood,
Об этом написано уже тысячу раз, и в сотне скриптов решение применено!
Просто меняете кодировку результата на читабельную.
Применительно к этому скрипту - перед отправкой в чат полученный результат нужно преобразовать в ANSI-кодировку:

Код
if fd and sz then
    fd = Utf8ToAnsi(fd)  --  это новая добавленная строка
    Core.SendToAll("<"..sBot.."> "..fd)
end

А вот само преобразование будет происходить ниже в другой функции (то, что в спойлере, нужно добавить к существующему скрипту ниже всех строк):
Переконвертирование с UTF-8 на ANSI
Код
---- Функция преобразования UTF-8 в ansi (by Setuper)
local utf8_decode = {
    [128]={[147]='\150',[148]='\151',[152]='\145',[153]='\146',[154]='\130',[156]='\147',[157]='\148',[158]='\132',[160]='\134',[161]='\135',[162]='\149',[166]='\133',[176]='\137',[185]='\139',[186]='\155'},
    [130]={[172]='\136'},
    [132]={[150]='\185',[162]='\153'},
    [194]={[152]='\152',[160]='\160',[164]='\164',[166]='\166',[167]='\167',[169]='\169',[171]='\171',[172]='\172',[173]='\173',[174]='\174',[176]='\176',[177]='\177',[181]='\181',[182]='\182',[183]='\183',[187]='\187'},
    [208]={[129]='\168',[130]='\128',[131]='\129',[132]='\170',[133]='\189',[134]='\178',[135]='\175',[136]='\163',[137]='\138',[138]='\140',[139]='\142',[140]='\141',[143]='\143',[144]='\192',[145]='\193',[146]='\194',[147]='\195',[148]='\196',
    [149]='\197',[150]='\198',[151]='\199',[152]='\200',[153]='\201',[154]='\202',[155]='\203',[156]='\204',[157]='\205',[158]='\206',[159]='\207',[160]='\208',[161]='\209',[162]='\210',[163]='\211',[164]='\212',[165]='\213',[166]='\214',
    [167]='\215',[168]='\216',[169]='\217',[170]='\218',[171]='\219',[172]='\220',[173]='\221',[174]='\222',[175]='\223',[176]='\224',[177]='\225',[178]='\226',[179]='\227',[180]='\228',[181]='\229',[182]='\230',[183]='\231',[184]='\232',
    [185]='\233',[186]='\234',[187]='\235',[188]='\236',[189]='\237',[190]='\238',[191]='\239'},
    [209]={[128]='\240',[129]='\241',[130]='\242',[131]='\243',[132]='\244',[133]='\245',[134]='\246',[135]='\247',[136]='\248',[137]='\249',[138]='\250',[139]='\251',[140]='\252',[141]='\253',[142]='\254',[143]='\255',[144]='\161',[145]='\184',
    [146]='\144',[147]='\131',[148]='\186',[149]='\190',[150]='\179',[151]='\191',[152]='\188',[153]='\154',[154]='\156',[155]='\158',[156]='\157',[158]='\162',[159]='\159'},[210]={[144]='\165',[145]='\180'}
}

local nmdc = {
    [36] = '$',
    [124] = '|'
}

function Utf8ToAnsi(s)
    local a, j, r, b = 0, 0, ""
    for i = 1, s and s:len() or 0 do
        b = s:byte(i)
        if b < 128 then
            if nmdc[b] then
                r = r..nmdc[b]
            else
                r = r..string.char(b)
            end
        elseif a == 2 then
            a, j = a - 1, b
----*****        elseif a == 1 then
        elseif a == 1 and utf8_decode[j] and utf8_decode[j][b] then
--            local z = string.char(b)
--            Core.SendToNick(sAdmin, z.." "..a.." "..r.." "..j.." "..b)
            a, r = a - 1, r..utf8_decode[j][b]
        elseif b == 226 then
            a = 2
        elseif b == 194 or b == 208 or b == 209 or b == 210 then
            j, a = b, 1
        else
            r = r..'_'
        end
    end
    return r
end
---- конец функции преобразования  ------

function OnError(s)
    Core.SendToOpChat(s)
end

В конце я добавил вывод в Опчат ошибок скрипта при падении в ходе тестирвания или работы. Это нужно приделать в любой ваш скрипт в Птоке.
Хотя я бы скрипт написал несколько иначе. big_smile.gif Но что есть, то есть, дело авторское.

Автор: Marc 11.8.2014, 14:06

Ksan!
Спасибо человеку, который так быстро откликнулся на эту проблему и не пожалел своего летнего времени на разъяснение проблемы!
Я просто сказал Devil_Blood, что сменилась кодировка в скрипте и что нужно править её.
Внёс изменения в скрипт по твоим двум добавлениям и сейчас всё работает на отлично, как и было раньше.

Автор: Karumo 20.12.2017, 11:58

стоит подобный скрипт вывода фактов с http://mydc.ru/r/?http://webdiscover.ru/facts/rand.php
но последние 2-3 дня стал выдавать хрень типа

Код
[Ср-20/12/17 06:05:51] <Факты> <!DOCTYPE html><html><title></title><script>var y=window</script><script>var x={o:'/PMSKfZ/facts/rand.php',c:1},z=1;function rsu(h){return(x.o).substr(0,x.c)+(x.o).substr(x.c+h)}y.location.assign(rsu(z))</script></html>
[Ср-20/12/17 09:05:51] <Факты> <!DOCTYPE html><html><title></title><script>var y=window</script><script>var x={o:'and.php',t:'/MgmkZ/',h:'facts/r'};function rsu(){return x.t+x.h+x.o}y.location.assign(rsu())</script></html>

причем это только на линуксе, в виндовс версии или из браузера выдает нормально!

Кто нибудь сталкивался с подобным?

P.S. что под socket что под curl

UPDATE 23.12.17 примерно в 12 дня по МСК глюк исчез... видимо вернули обратно.