Php робота з icq (php bot icq)

Сьогодні я б хотів поговорити про те, як можна легко працювати з ICQ на мові PHP.

Інколи це буває дуже корисно. Використовуючи свою фантазію, можна написати багато корисних речей для свого сайту. Наприклад для управління сервером або сайтом через аську. Ви можете просто відправляти заздалегідь запрограмовані команди, наприклад відключити який-небудь товар з інтернет-магазину, через icq і отримувати у відповідь звіти про роботу.

Розглянемо ми взаємодія PHP і ICQ на реальному прикладі. Спробуємо написати програму шпаргалок на ICQ. Розібравши її, ви без зусиль зможете її переробити для виконання будь-яких завдань.
Суть програми полягатиме в наступному:

  1. Заливаємо на сервер файл .txt зі списком питань і відповідей в заздалегідь певному форматі (наприклад розділяючи питання від відповіді якимось роздільником)
  2. Програма буде прогружаются цей файл в масив
  3. При відправленні нашому боту (назвемо його так) команди наприклад «list», програма повинна нам відправити пронумерований список питань
  4. При відправці номера питання, ми повинні отримати на нього відповідь

У загальних рисах має бути якось так.

І так, приступимо!

Зараз подумаємо над синтаксисом текстового файлу з питаннями / відповідями.

Найпростіший варіант для цього - це писати в кожному рядку по питанню, потім роздільник (наприклад потрійне двокрапка «.»), А потім вже відповідь. Отримуємо з питання (відповіді) в рядок. Накидати тестовий файл vopros.txt.

Тут все зрозуміло. Тепер розберемося з самою програмою.

У завантажені вами з сайту архіві, ви можете знайти файл bot.php. Це тестовий приклад для роботи бота. У ньому є основний функціонал цього класу. На його базі і напишемо нашого бота. Все зайве видалимо, відсутню додамо. В результаті я отримав наступний шаблон:

Даний скрипт спочатку встановлює деякі настройки сервера (max_execution_time - час виконання встановлюється нескінченне і error_reporting - включаються оповіщення про всіх помилках).

Потім необхідно зареєструвати для бота свій номер ICQ. Вони вказуються в 5 і 6 сходинці. Також для управління ботом необхідно вказати номер адміна бота. Йому будуть доступні привілейовані команди. Потім ми просто підключаємо наш клас і створюємо об'єкт WebIcqPro. З ним ми і будемо працювати надалі.
Стартуємо біс кінцевий цикл (while (1)). Він нам потрібен для постійної роботи. Якщо необхідно буде його завершити, зробимо це за допомогою команди die ().

Метод readMessage () повертає спеціальний масив з усією інформацією про повідомлення. Кожні 2 секунди він виконується і перевіряються нові повідомлення.

Далі перевіряється кодування повідомлення і при необхідності воно перекодируется.

Тепер приступимо до обробки файлу з питаннями / відповідями.

Відразу після визначення номера адміністратора вставимо наступний код:

Він не складний, але все одно в двох словах опишу що він робить.

Якщо $ file існує, програма відкриває його. Починає зчитувати по рядку і заносити інформацію в асоціативний масив $ questions. З нього надалі буде братися вся інформація.

Тепер починаємо писати обробку команд (це місце знаходиться на 48 сходинці).

Суть буде найпростіша. Операторів if ми будемо перевіряти що через команда прийшла, і в залежності від неї, будемо виконувати різні дії.

Напишемо першу обробку:

Тут думаю навіть пояснень ніяких не потрібно. У змінній $ messaga сидить повідомлення отримане з icq. Ми просто порівнюємо його на відповідність із заздалегідь задуманої рядком і в залежності від того, збігається вона чи ні, виконуємо певні дії.

Другий обробник буде трохи цікавіше:

Якщо рядок дорівнює! Exit то ми зупиняємо бота. Але не кожен може його зупинити, саме тому ми спочатку перевіряємо щоб номер відправника повідомлення дорівнював номеру адміна, зазначеного на початку програми.

Таким способом можна програмувати будь-які процедури доступні тільки для адміна сервера.

Наступна обробка буде відправляти пронумерований список усіх питань.

Тут я перебираю масив з питаннями, формую рядок $ string і відправляю її, але не відразу весь список, а по $ po_skolko штук. Зробив я це потім, що у аськи є обмеження на розмір повідомлення. Якщо питань буде багато, то не всі вони дійдуть. Повідомлення обрізане. Тому доводиться відправляти частинами.

І тепер найголовніша обробка, це відправка відповіді на питання:

Тут я не став хитрувати і зробив тупу перевірку! Empty ($ questions [$ messaga] [ 'otvet']). Звичайно можна зробити і по правильніше, але по-перше такий варіант теж має право на існування, а по-друге я просто намагаюся передати суть.

Ось повний код програми:

Якщо розвинути цю думку то можна написати додаток для управління сайтом через ICQ, наприклад відключити товар з інтернет-магазину. І не тільки сайтом, але і сервером. Головне не забувати робити перевірки на відповідність номера адміна.

Також можна відправляти разом з командою який-небудь параметр, наприклад номер статті. Наприклад рядок hide_article 28 означає приховати статтю з номером статті. Оброблювач для неї буде наступний:

А далі можна підключати свою фантазію і писати будь-які обробки для управління сайтом через icq.

Архів з вихідними кодами можна скачати тут.

Схожі статті