myDC.ru

Здравствуйте, гость ( Вход | Регистрация )

 

> Интересные факты, Скрипт вставляет в главный чат интересные факты с сайта

Теги
Нет тегов для показа
dimajak
сообщение 16.2.2011, 22:52
Сообщение #1


Продвинутый участник
****

Группа: Пользователи
Сообщений: 157
Регистрация: 19.1.2010
Из: Волгоград
Пользователь №: 5 756
Спасибо сказали: 76 раз




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

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

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

Для работы скрипта необходимы библиотеки Luasocket.

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


Скачать:
Прикрепленный файл  facts_api2.lua ( 796 байт ) Кол-во скачиваний: 326


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

Для работы скрипта необходимы библиотеки DLL библиотека для работы с базой данных MySQL.

Скачать:Прикрепленный файл  facts_mysql_api2.lua ( 2.68 килобайт ) Кол-во скачиваний: 144


Спасибо сказали:
Go to the top of the page
+Quote Post
 
Начать новую тему
Ответов
OVERLORD1979
сообщение 17.2.2011, 6:24
Сообщение #2


Абсолютный новичок


Группа: Пользователи
Сообщений: 4
Регистрация: 4.12.2008
Из: Москва
Пользователь №: 1 306
Спасибо сказали: 0 раз




и как им пользаватся? не менюшки не команд...ошибки тоже нет...или он автоматически каждые 15 минут сам выдаёт?
Go to the top of the page
+Quote Post
npocToNIK
сообщение 17.2.2011, 12:22
Сообщение #3


Абсолютный новичок


Группа: Пользователи
Сообщений: 6
Регистрация: 22.12.2009
Пользователь №: 5 440
Спасибо сказали: 1 раз




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


да автоматически , каждые 15 минут. у меня всё отлично работает )
Go to the top of the page
+Quote Post
Marc
сообщение 17.2.2011, 13:58
Сообщение #4


Активный участник
***

Группа: Пользователи
Сообщений: 93
Регистрация: 25.1.2010
Пользователь №: 5 828
Спасибо сказали: 4 раза




Да, работает каждые 15 мин и время можно изменять...
Думаю, что лишняя информация пользователям не помешает (особенно, когда нет активного общения), да и отключить (при необходимости) всегда можно!
Go to the top of the page
+Quote Post
dimajak
сообщение 18.2.2011, 23:39
Сообщение #5


Продвинутый участник
****

Группа: Пользователи
Сообщений: 157
Регистрация: 19.1.2010
Из: Волгоград
Пользователь №: 5 756
Спасибо сказали: 76 раз




Решил прикрутить БД в MySQL чтобы факты "впустую" не выводились. big_smile.gif
Теперь факты сохраняются в БД, при этом повторы не сохраняются в БД, и не выводятся в чат. Дается 10 попыток для вывода неповторяющегося факта.
Добавились настройки для работы с MySQL.
БД с фактами можно будет использовать, например, на своем сайте. Т.е. скрипт будет накапливать факты в БД, одновременно информируя посетителей хаба, а на сайте вы сможете выводить случайный факт из этой БД, развлекая уже посетителей сайта.
ПыСы. В моей БД уже более 400 фактов.
Go to the top of the page
+Quote Post
KCAHDEP
сообщение 3.5.2012, 8:18
Сообщение #6


Глубина-глубина, я не твой… Отпусти меня, глубина…
****

Группа: Пользователи
Сообщений: 194
Регистрация: 13.10.2010
Из: Россия
Пользователь №: 7 882
Спасибо сказали: 22 раза




Спасибо за хороший скрипт, все работает ошибок не выводит сообщения не повторяются, только вот последнюю букву в предложении съедает постоянно shocked.gif
тырк
Go to the top of the page
+Quote Post
dimajak
сообщение 3.5.2012, 15:15
Сообщение #7


Продвинутый участник
****

Группа: Пользователи
Сообщений: 157
Регистрация: 19.1.2010
Из: Волгоград
Пользователь №: 5 756
Спасибо сказали: 76 раз




Цитата(KCAHDEP @ 3.5.2012, 9:18) *
Спасибо за хороший скрипт, все работает ошибок не выводит сообщения не повторяются, только вот последнюю букву в предложении съедает постоянно shocked.gif
тырк

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


Спасибо сказали:
Go to the top of the page
+Quote Post
KCAHDEP
сообщение 3.5.2012, 19:24
Сообщение #8


Глубина-глубина, я не твой… Отпусти меня, глубина…
****

Группа: Пользователи
Сообщений: 194
Регистрация: 13.10.2010
Из: Россия
Пользователь №: 7 882
Спасибо сказали: 22 раза




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


Спасибо помогло victory.gif
Go to the top of the page
+Quote Post
KCAHDEP
сообщение 27.5.2012, 11:48
Сообщение #9


Глубина-глубина, я не твой… Отпусти меня, глубина…
****

Группа: Пользователи
Сообщений: 194
Регистрация: 13.10.2010
Из: Россия
Пользователь №: 7 882
Спасибо сказали: 22 раза




перестало выводить факты, никаких ошибок нету... вариант с мускулом.
Go to the top of the page
+Quote Post
MIKHAIL
сообщение 6.3.2014, 23:10
Сообщение #10


KEEP CLEAR AT ALL TIMES
****

Группа: Пользователи
Сообщений: 137
Регистрация: 4.9.2011
Из: Беларусь, Минск
Пользователь №: 9 667
Спасибо сказали: 2 раза




Часть кода из скрипта facts_mysql_api2.lua:
Код
...
if flag then
    Core.SendToAll("<"..sBot.."> "..fd)
    break
end
...

Изначально зачем здесь оператор break, какая роль ему отведена? Проверил – и без него тоже работает.
Go to the top of the page
+Quote Post
Ksan
сообщение 7.3.2014, 5:57
Сообщение #11


Белый Волк
*********

Группа: Пользователи
Сообщений: 1 715
Регистрация: 11.9.2008
Из: г.Томск
Пользователь №: 516
Спасибо сказали: 648 раз




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


Спасибо сказали:
Go to the top of the page
+Quote Post
MIKHAIL
сообщение 8.3.2014, 2:10
Сообщение #12


KEEP CLEAR AT ALL TIMES
****

Группа: Пользователи
Сообщений: 137
Регистрация: 4.9.2011
Из: Беларусь, Минск
Пользователь №: 9 667
Спасибо сказали: 2 раза




Ksan, не сообразил я, что break применяется для останова и выхода из цикла.
Проследил, и, кстати, при конструкции and not flag do наличие break не обязательно, а вот при or not flag do – обязательно.
Go to the top of the page
+Quote Post
Devil_Blood
сообщение 6.8.2014, 11:28
Сообщение #13


Абсолютный новичок


Группа: Пользователи
Сообщений: 2
Регистрация: 16.2.2014
Пользователь №: 12 320
Спасибо сказали: 0 раз




ребята на PtokaX 0.5.0.2 на x64 выводит вместо текста бра-кодабру
Go to the top of the page
+Quote Post
Marc
сообщение 8.8.2014, 1:33
Сообщение #14


Активный участник
***

Группа: Пользователи
Сообщений: 93
Регистрация: 25.1.2010
Пользователь №: 5 828
Спасибо сказали: 4 раза




Devil_Blood
Да, есть такое дело!
Надо править кодировку в скрипте видимо, чтобы шёл русский язык.
Видно изменение на сайте произошло у них! Просить надо знающих людей теперь!
Go to the top of the page
+Quote Post
Ksan
сообщение 8.8.2014, 13:11
Сообщение #15


Белый Волк
*********

Группа: Пользователи
Сообщений: 1 715
Регистрация: 11.9.2008
Из: г.Томск
Пользователь №: 516
Спасибо сказали: 648 раз




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 Но что есть, то есть, дело авторское.


Спасибо сказали:
Go to the top of the page
+Quote Post
Marc
сообщение 11.8.2014, 14:06
Сообщение #16


Активный участник
***

Группа: Пользователи
Сообщений: 93
Регистрация: 25.1.2010
Пользователь №: 5 828
Спасибо сказали: 4 раза




Ksan!
Спасибо человеку, который так быстро откликнулся на эту проблему и не пожалел своего летнего времени на разъяснение проблемы!
Я просто сказал Devil_Blood, что сменилась кодировка в скрипте и что нужно править её.
Внёс изменения в скрипт по твоим двум добавлениям и сейчас всё работает на отлично, как и было раньше.
Go to the top of the page
+Quote Post
Karumo
сообщение 20.12.2017, 11:58
Сообщение #17


Участник
**

Группа: Пользователи
Сообщений: 38
Регистрация: 24.11.2008
Из: Москва
Пользователь №: 1 186
Спасибо сказали: 4 раза




стоит подобный скрипт вывода фактов с 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 дня по МСК глюк исчез... видимо вернули обратно.
Go to the top of the page
+Quote Post

Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

Collapse

> Похожие темы

  Тема Ответов Автор Просмотров Последнее сообщение
No New Posts От: Интересные ДС клиенты
От темы с ID: 4699
0 HallCat 2 239 27.2.2011, 5:21 Посл. сообщение: HallCat
No New Posts Topic has attachmentsИнтересные ДС клиенты
1 @_JuNiOr_@ 3 324 25.2.2011, 13:50 Посл. сообщение: Delia

 



RSS Сейчас: 18.6.2018, 18:13