![]() |
Бот для чата mail.ru
Выложил исходник бота для чата mail.ru. Кому интересно - сюда
|
Цитата:
|
Цитата:
Код:
http://www.bit-team.com/modules.php?name=Articles&file=view&articles_id=18 |
http://www.bit-team.com/modules.php?name=Articles&file=view&articles_id=18
|
Выложил еще один усовершенствованный исходник бота для чата mail.ru.
http://bit-team.com/modules.php?name=Articles&file=view&articles_id=20 |
Мде. Я своего бота боюсь в публик выкладывать, а ты так сразу... Щас народ понесется из него флудеры делать и всеких "мертвых" людей, для повышения рейтинга каналов. Накроется чат :)
Но все-равно ++ |
Классно!
Автору огромный респект. Но у мня есть пара глупых вопросов * Почему авторизация проходит в 5 запросов? Я догадываюсь, что это как-то связано со спецификой чата, но непонятно как. То есть я прошу объяснить эту самую спецификацию (всегда думал, что авторизация проходит только по одной схеме - отправка запроса > получение кук в ответе > возможность работы в чате посредством этих кук. Теперь оказывается, что первых кук недостаточно) Как авторизацию делает fucker"ok? * Есть ли возможность реагировать на события типа появления новых сообщений, захода новых юзеров и т.д. не обновляя окно каждый раз? Ведь браузер не обновляется. |
Привет wffic от подельника - <b>Hrumtik</b>'а! =))
Как видно из исходника, сама авторизация проходит в 3 запроса: 1. POST .../cgi-bin/auth (в ответ куки MailUser, Mpop и t +ссылка [http://my.chat.mail.ru/cgi-bin/checkcookie?id=...]) 2. GET [ссылка] (в ответ ссылка-2 [http://chat.mail.ru/?mra=&roomleft=&nick=...]) 3. GET [ссылка-2] (в ответ куки MRCU и TICKET +ссылка [.../cgi-xml/chat]) Самые важные куки MRCU и TICKET получены, используя их можно общаться в чате и прочее... Четвертый запрос - это запрос на [.../cgi-xml/chat], т.е. на страничку с тремя фрэймами (чат, лидер чата и список чатлан), которая отображается при входе в чат через браузер. Пятый запрос - это запрос как раз на фрэйм чата [.../cgi-xml/irc] с этой страницы, т.к. для общения нужен только он... в процессе используется также фрэйм списка чатлан - это отдельная функция с запросом на [.../cgi-xml/list]... +функция с запрсом на список комнат [.../data-xml/header.html#] +фрэйм "лидер чата", ф-я с запросом на [.../home/smsleader.html].... и пр. (не включено в статью) Очевидно что четвертый запрос можно игнорировать перескачив сразу на фрэйм чата [.../cgi-xml/irc], но возиться с этим желания нет =), тем более что функция PostGet все упращает. Почему столько запросов, это уже фантазия майловцев.. захотят сделают и 10 запросов для авторизации... это ничего не меняет, возможно только перегрузка их сервера... хотя перегруз вряд ли им грозит =) По поводу событий.... никаких проблем с реакцией на вход и выход чатлан, а также чтение всех сообщений чата, определение обращений к боту, обращения в личку и прочее - не вызывает.. это все сделано но не выложено в статье... если вы внимательно посмотрите на исходник то прекрасно поймете куда и что нужно вставить, чтобы реагировать на эти события. Боту нет необходимости обновлять страницу, т.к. сервер не закрывает сокет а передает в него все вновь поступившие сообщения и разные события... поэтому повторю, проблем с чтением и реакцией быть не должно, просто надо дописать кое-что и кое-где... причем без использования многопоточности и ... но это я разговорился =)) Хотел еще что-то понаписать.. да некогда... Все это безобразие написано и на Delphi и пр., ... и не только для чата и не только для Mail.Ru...=))... но для статьи хватит и Mail.Ru с PHP =) |
Вот такие вот дела, пока дождеси письма при регистрации на форуме.... мля... расхочешь вапще сюда заходить :)
|
@Hrumtik: Я вот дождался и спросил чего хотел =)
@SMERSH: Спасибо, с запросами всё понятно =) Я посмотрел скрипт внимательно и увидел следущее: на пятом запросе режим сокета устанавливается в "неблокирующий" и вместо чтения ответа с сервера после запроса начинается бесконечный цикл. Я понимаю так: режим неблокирующий и сокет не закрыт => в него переходит поток данных с сервера, в котором и содержатся все события. Нужно только непрерывно его читать. Как же это сделать? =) Цитата:
(Я не слишком знаю пхп и сетевое программирование... Я только начинаю =)) |
Я усе выложил здесь (все что нуно заменить или добавить для того чтобы бот реагировал):
форум Bit-Team http://forum.bit-team.com/index.php?act=ST&f=9&t=166&st=0 Естесно открываем бесконечный цикл while (true == true){ // бесконечный цикл usleep(100000); $response = fgets($sock); // читать ответ ... } usleep - это задержка в микросекундах... тут 100 миллисек.... она нужна, чтобы винда не повесилась =)) дальше читаем ответ (сервер построчно передает инфу) ... ну и все в этом духе |
Авторизацию делаю в 2 захода:
>(сервер построчно передает инфу) Я давно уже не смотрел, но в момент написание бота мной, сервер передавал все комманды без \n, сталобыть приходилось считывать посимвольно. А вот самое главное - парсер дейсвий (вырезка из моего кода) PHP код:
Делитесь секретами, кто чего интересного нашёл :) Настройки бота (фильтры мата и тд) http://mailovka.ru/files/cmr/normalnoe/options.xml Не советую делать, обычный массив из матов и проверят т.к. реакция на слова: бляха, раслаблятся, застра*** и тд будет весьма обидна, для ваших юзеров ;) Кому интересно, мой бот работает в канале "Нормальное_общение", под никому Нормобик. |
fucker"ok
Интересно.... ...да дела, я как то думал что не стоит использовать класс... хотя вроде нагляднее и удобнее кажется... небось оптимизировал уже все по самое немагу ;) А как ты решал проблему ответов, не изобретать же ИИ :D... вот я пытался как-то составить базу вопросов и ответов на них... при получении мессаги соорудить вроде поиска в яндексе.. т.е. по количеству слов, по проценту встречаемости их и прочее... как -то максимально приблить заданный вопрос к вопросу в базе... но это оказалось трудновато.. точнее трудно реализовать не загрузив машину на смерть :confused: |
А кто знает верный способ, штоб скрипт не отваливался по тайм-ауту??
|
Цитата:
Чтобы не уходил в away /cgi-xml/away?away=0 или мессагу каждые 15 мин кидать хотя бы (я вот рекламу кидаю на сайт той комнаты) Удобно повесить сие на cron (чтобы каждый 15 мин запускался скрипт) В винде правда крона нет, но наверняка есть что-то похожее :) Чтобы скрипт не отрубался - set_time_limit(0); |
Цитата:
Цитата:
Код:
Примечание: эта функция не работает в системах Windows. |
usleep для Windows
function wusleep($microseconds) { @fsockopen("127.0.0.1", 22333, $errno, $errstr, $microseconds/1000000); } // 22333 - закрытый порт на вашем компутере |
баги
Коечно usleep не работает под Windows, просто у меня винда не в курсе. Там есть баги и я давно их у себя пофиксил и переписал всего бота.... неужели я не знаю как выходить из бесконечного цикла и прочую хню... в паблике пример... дорабатывайте сами, если нужно =)
По крайней мере я скачал PHP 5.2.0 c IDE и никаких проблем с usleep у меня не было никогда ;) |
Да и патом причем тут винда, когда гоняться все это будет у хостера :confused:
Кстати забыл сказать, что я то юзаю вот такую конструкцию: PHP код:
|
А тут кто та сказал что у него бот-модератор.. так вот, как добавить модерские опции, чтобы он там выкидывал блокировал и тп??
|
Это надо смотреть какие функции есть у модератора....Я там не сижу и понятия не имею какие там функции...
Но безусловно приделать - пустяк:) |
Усе уже давно приделанно ! каму интересно стучите пишите .....телеграфируйте
|
Не нашел бота... Удалил чтоли из паблика? Хотел посмотреть исходники.
|
А что с исходниками случилось? чтото ничего не нашел
|
маиловцы чтото изменили ник заходит но не общаеться
|
ищите исходники в майском номере журнала ][акер, рубрика X-tools, там все исправлено после измены чата
|
у меня есть исходник бота для чата mail.ru
http://slil.ru/24588372 пароль 777 |
вот еще один
http://slil.ru/24588380 пароль 777 |
та же проблема..( бот заходит.. но команд не слушается и молчит...
в php, если честно, не очень разбираюсь... может я неправильно в массиве объявляю переменные с доверенными е-майлами, которых он должен слушаться?! подскажите кто знает? |
| Время: 22:10 |