PDA

Просмотр полной версии : ICQ на php


dk-ne
31.07.2009, 23:14
Есть задумка написать icq бот, который мог бы не только отправлять сообщения, но и вести переписку, а ответы записывать в БД. Проблема в том, как сделать принятие сообщений, чтоб реально работали условия if-else, а ответ писался хотя бы для начала в какую-нибудь переменную. :confused:

root_sashok
31.07.2009, 23:23
Бери WebIcqLite.php (http://wip.asminog.com/projects/icq/WebIcqLite.class.phps) движок, пиши управляющий скрипт, вот пример такого скрипта:

<?php
include('WebIcqLite.class.php');
define('UIN', 987654321);
define('PASSWORD', 'password');
$icq = new WebIcqLite();
if($icq->connect(UIN, PASSWORD)){
if(!$icq->send_message('123456789', 'Привет, Античат!')){
echo $icq->error;
}else{
echo 'Message sent';
}
$icq->disconnect();
}else{
echo $icq->error;
}
?>

dk-ne
31.07.2009, 23:26
А запись всех входящих сообщений в отдельные переменные как делать?

root_sashok
31.07.2009, 23:39
Автор, специально для тебя выкладываю бота. Итак. Запуск производится через файл 55.php. В нем же имееются комментарии как что работает, там есть условия "ответ на то, что прислал пользователь", там есть функция записи лога, там есть функция управления ботом с $ADMINUIN, добавления новых фраз в библиотеку бота (fraza.txt, оттуда берется рандомная фраза, если то, что ввел пользователь не совпадает с тем, на что имеются ответы в 55.php), смена статуса бота, посылка сообщения на $UIN через бота. Движком является Icq.php.

Залил сюда (http://rghost.ru/376079), пароль на скачивание - ICQBOT.

С тебя плюсик ;)

Будет что не понятно - пиши в ICQ.

dk-ne
31.07.2009, 23:42
ОК. Щас затестю

root_sashok
31.07.2009, 23:44
Условия добавлять примерно так:

if (strpos($text,'хай') or strpos($text,'привет')) {$otvet.="привет!";}

dk-ne
01.08.2009, 00:06
Я вроде начинаю понимать. А как вот это исправить?
Fatal error: Call to undefined function socket_create() in W:\home\localhost\www\WebIcqLite.class.php on line 393

В той строке это: $this->socet = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

root_sashok
01.08.2009, 00:19
Sockets включил?

dk-ne
01.08.2009, 00:23
Я на компе через денвер пробую. Реально проверить?

root_sashok
01.08.2009, 00:26
По-моему ты меня не понимаешь. У тебя не включены Sockets видимо.

dk-ne
01.08.2009, 00:28
Я в первый раз с сокетами и асей пробую. Не знаю как их включать

root_sashok
01.08.2009, 00:33
Не помню как на денвере... Зарегистрируй себе бесплатный хостинг с сокетами. Или платный...

dk-ne
01.08.2009, 01:04
Русских не нашел. А с иностранными все какие-то проблемы

b3
01.08.2009, 11:34
ТС, открой свой php.ini и найтди там строку :
;extension=php_sockets.dll
Убери вначале знак ";" и сохрани изменения. Перезапуск сервера, все, сокеты работают. Совет #2: подучи основы, ты слишком рано начинаеш работать с классами и тд, незная что такое Call to undefined function и что такое сокеты.

dk-ne
01.08.2009, 15:13
Есть предложение. Условие например такое:
$а = "сколько вам лет";
$b = "любимый цвет";
$c = "1. да";
$d = "2. нет";
Дальше смысл такой: пишет чел в асю. Ему приходит первое сообщение из $а. Ответ на него записывается в бд. Как только ответили, бот отсылает второе сообщение из $b. Ответ снова сохраняется. Третим идет вопрос с вариантами ответа $c, $d. Если ответ приходит цифрой из вариантов, то идем дальше на условие if-else, иначе пишем текст с пояснением его ошибки и спрашиваем заново. Если ответ нормальный, то снова пишем его в бд. Ну и т.д.
Закину полтинник на счет тому, кто первым разместит работоспособный код. Спс. :-)

JIexaPol
01.08.2009, 16:02
чувак, если бы было время - я бы помог бесплатно и объяснил..стукни в асю если можешь тогда объясню как бота делать..я тоже на денвере запускаю :) аська 7876878 просто я на ачате не сижу....

mailbrush
01.08.2009, 16:12
Идите в ПМ/Аську ругаться, кодеры, блин...
ТС, стукни мне в аську, 674542, помогу :)
Естественно бесплатно :)

dk-ne
01.08.2009, 16:16
Парни, мне б его сделать в ближайшие дни. Сам бы пробовал всяко разно, но времени впритык, работать заставляют:-). Я могу написать в аську часа через три, но времени разбирать мало. Буду признателен за готовое решение. Кстати, забыл написать про плюсики в репутацию на анчате. Мне не жалко

root_sashok
01.08.2009, 16:32
Так что, у тебя получается что бот сам должен писать?

mailbrush
01.08.2009, 16:36
Вообще то, такие вещи пишутся на компилируемом языке.

root_sashok
01.08.2009, 16:38
mailbrush, почему? Боты на PHP неплохо работают.

ТС: тебе нужно, чтобы начинал пользователь... Например пишет он комманду Привет. Бот отвечает "Привет". Дальше уже идет вопрос "Ваш любимый цвет" и т.д. Я правильно понимаю?

mailbrush
01.08.2009, 16:42
root_sashok, я имею в виду в ТС'овом случае, т.к. сомневаюсь, что он купит и настроит платный хостинг. А на фришных стоит ограничение на время выполнения скрипта.

PS: ТС, ща забацаем :)

root_sashok
01.08.2009, 16:44
Тогда лучше действительно поставить денвер.

Deathdreams
01.08.2009, 16:54
Сообщения надо брать strtolower

mailbrush
01.08.2009, 17:02
Deathdreams, а я обойдусь и без этой ф-ции :)

dk-ne
01.08.2009, 17:07
Да, мне надо, чтоб бот сам писал. И вообще он должен работать всегда без какого-либо вмешательства человека.

JIexaPol
01.08.2009, 17:08
strtolower Эта функция разные кодировки не воспринимает у меня))..английские буквы преобразует а вот русские... ( по крайней мере это только у меня были такие проблемы )
у кого тоже проблема то у меня вот так:

function strtolowex($txt) {
$txt=strtolower(strtr($txt, "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧ ШЩЪЫЬЭЮЯ", "абвгдеёжзийклмнопрстуфхцч шщъыьэюя"));
return($txt);
}

:-)

dk-ne
01.08.2009, 21:10
Поднимаю тему

dk-ne
01.08.2009, 22:12
Неужели никто не может помочь?

dk-ne
01.08.2009, 22:50
Надеялся на кодеров для начала)))


Условие например такое:
$а = "сколько вам лет";
$b = "любимый цвет";
$c = "1. да";
$d = "2. нет";
Дальше смысл такой: пишет чел в асю. Ему приходит первое сообщение из $а. Ответ на него записывается в бд. Как только ответили, бот отсылает второе сообщение из $b. Ответ снова сохраняется. Третим идет вопрос с вариантами ответа $c, $d. Если ответ приходит цифрой из вариантов, то идем дальше на условие if-else, иначе пишем текст с пояснением его ошибки и спрашиваем заново. Если ответ нормальный, то снова пишем его в бд. Ну и т.д.
Закину полтинник на счет тому, кто первым разместит работоспособный код. Спс. :-)

KaMiKadZe
02.08.2009, 08:04
Надеялся на кодеров для начала)))


Условие например такое:
$а = "сколько вам лет";
$b = "любимый цвет";
$c = "1. да";
$d = "2. нет";
Дальше смысл такой: пишет чел в асю. Ему приходит первое сообщение из $а. Ответ на него записывается в бд. Как только ответили, бот отсылает второе сообщение из $b. Ответ снова сохраняется. Третим идет вопрос с вариантами ответа $c, $d. Если ответ приходит цифрой из вариантов, то идем дальше на условие if-else, иначе пишем текст с пояснением его ошибки и спрашиваем заново. Если ответ нормальный, то снова пишем его в бд. Ну и т.д.
Закину полтинник на счет тому, кто первым разместит работоспособный код. Спс. :-)
Лучше иди книгу почитай...
Вот тебе для начала
interface IcqBot {
protected var $MsgIn = array();
protected var $MsgOut = array();

public function SendMessage($IcqNum,$MsgOut);
public function SaveAnswer($IcqNum,$MsqIn,$MsgOut);
}

И вообще если без знаний хотел скрипт, то тебе в раздел Покупка/Продажа, а то надоели "помогите написать" = "напишите за меня"

dk-ne
02.08.2009, 19:21
Почему у меня постоянно выскакивает ошибка:
Fatal error: Call to undefined function socket_create() in W:\home\localhost\www\WebIcqLite.class.php on line 393

391 function open($url = array('login.icq.com', 5190))
392 {
393 $this->socet = socket_create (AF_INET, SOCK_STREAM, SOL_TCP);
394 if ($this->socet < 0 || $this->socet === false)
395 {

G1yuK
02.08.2009, 19:35
dk-ne, вам уже в прошлых постах говорили, что у вас не включены сокеты. Если не работает denwer(хотя вам были предложены и номера ась для помощи и одно из решений, как включить), попробуйте другие сборки-сервера, например: Vertrigo, XMMP, UniServer

dk-ne
02.08.2009, 19:38
А как-то включить можно то, что есть уже?

KaMiKadZe
02.08.2009, 19:45
А как-то включить можно то, что есть уже?
Смотрим в php.ini (eg. %WINDIR%\php.ini) и смотрим в раздел "Dynamic Extensions". Там должна быть раскоментирована строчка "extension=php_sockets.dll ". Далее смотрим директиву "extension_dir" она должна указывать на путь где лежат все динамически подключаемые модули. Лезем туда и смотрим присутсвует ли библиотека там. Если да то читаем дальше, если нет то скачайте модуль под вашу версию php и положите в эту директорию.
У тебя зависит расположение php.ini от сборки как и прочее
И маленькие совет: Лучше все скрипты проверять на хостинге котором будете запускать этот скрипт, меньше гемороя после будет

dk-ne
03.08.2009, 22:55
Вобщем нет у меня там путей на модули. Php.ini у меня находится только в C://PHP. А стоит денвер. Причем кроме php.ini по тому пути ничего нет

imajo.ati
05.08.2009, 09:03
через поиск по файлам находишь все php.ini на твоём компьютере и если думать особо лень то во всех раскомментируешь модуль сокетов. как он называется уже сказали. как искать в файле строчку думаю тоже понятно )