Сделаю оговорочку сразу спешил фор кулхацкеров: бот не умеет спамить, рассылать сообщения и т.д., он просто отвечает если ему кто-то напишет.
Давайте напишем бота, который будет показывать время сервера. Серверные команды будут начинаться с символа "!".
Для начала качаем COM обертку для работы со Skype API
отсюда.
Распаковываем архив и регистрируем dll в системе: Пуск -> Выполнить -> "regsvr32 E:\Skype4COM.dll", где "E:\" - путь к dll.
Теперь создаем новый проект Winforms и добавим в него ссылку на dl: Project - Add References - Browse (находим библиотеку и нажимаем Ok).
Перейдем к коду.
Объявляем пространства имен:
using System;
using System.Windows.Forms;
using SKYPE4COMLib;
Инициализация объектов:
private Skype skype;
private int count;
Создаем новый экземпляр класса Skype и ставим обработчик событий:
public Form1
()
{
InitializeComponent
();
skype =
new Skype
();
// Совокупляемся со скайпом))
skype.
Attach(7,
false);
// Начинаем слушать сообщения
skype.
MessageStatus +=
new _ISkypeEvents_MessageStatusEventHandler
(skype_MessageStatus
);
}
Обработчик событий:
private void skype_MessageStatus(ChatMessage msg, TChatMessageStatus status)
{
// Если вначале сообщения стоит символ "!"
if (msg.Body.IndexOf("!") == 0)
{
count++; // увеличиваем количество вызванных обработчиков
if (count == 2) // если обработчик вызван второй раз обрабатываем команду !time и отсылаем результат клиенту
{
// Отсылаем результат клиенту
skype.SendMessage(msg.Sender.Handle, CommandHandler(msg.Body.Replace("!", "")));
count = 0;
}
}
}
По непонятным причинам метод skype_MessageStatus вызывается дважды.
Обработчик команд:
private string CommandHandler(string str)
{
string result = "";
switch (str.ToLower())
{
case "time":
result = "Current Time is: " + DateTime.Now.ToLongTimeString();
break;
}
return result;
}
Компилируем, запускаем скайп, затем нашего бота - в скапе должно появится такое окошно
жмем "Дать доступ" и наслаждаемся)
