|
Frozzeg ↓
|
 |
|
07 Октябрь, 2011, 11:32:18
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Санитары Карма: 80
Сообщений: 5308 Сила слова: 1.51
|
Сделаю оговорочку сразу спешил фор кулхацкеров: бот не умеет спамить, рассылать сообщения и т.д., он просто отвечает если ему кто-то напишет.
Давайте напишем бота, который будет показывать время сервера. Серверные команды будут начинаться с символа "!".
Для начала качаем 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;
}
Компилируем, запускаем скайп, затем нашего бота - в скапе должно появится такое окошно
жмем "Дать доступ" и наслаждаемся)

|
|
|
« Последнее редактирование: 07 Октябрь, 2011, 11:32:18 от Frozzeg »
|
Записан
|
Эксперт — это человек, который в узкой области допустил все возможные ошибки. © Нильс Бор.
|
|
|
|
adw0rd ↓
|
 |
|
16 Август, 2009, 04:20:08 , спустя
|
НЕ ХУЕТА!
ХУЕТА!
|
эдво
Группа: Джедаи Карма: не нужна
Сообщений: 17223 Сила слова: 1.65
|
Таки дописал :)
|
|
|
|
|
Записан
|
|
|
|
|
Frozzeg ↓
|
 |
|
16 Август, 2009, 04:22:11 , спустя 2 минуты 3 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Санитары Карма: 80
Сообщений: 5308 Сила слова: 1.51
|
угу)
ночью что-то делать - это пиздец, на ровном месте ошибки появляются... все я спать
|
|
|
|
|
Записан
|
Эксперт — это человек, который в узкой области допустил все возможные ошибки. © Нильс Бор.
|
|
|
|
adw0rd ↓
|
 |
|
16 Август, 2009, 04:25:15 , спустя 3 минуты 4 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
эдво
Группа: Джедаи Карма: не нужна
Сообщений: 17223 Сила слова: 1.65
|
угу)
ночью что-то делать - это пиздец, на ровном месте ошибки появляются... все я спать
угу, я щ тоже закомичу новый нотифер для пм и тоже спать
|
|
|
|
|
Записан
|
|
|
|
|
Qpal-off ↓
|
 |
|
19 Июль, 2011, 08:50:35 , спустя 702 дня 4 часа 25 минут 20 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Карма: 0
Сообщений: 1 Сила слова: 0
|
Подскажите как при входе в Skype менять юзера и пароль через API (Skype4COM.dll)?
|
|
|
|
|
Записан
|
|
|
|
|
Frozzeg ↓
|
 |
|
19 Июль, 2011, 09:03:06 , спустя 12 минут 31 секунду
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Санитары Карма: 80
Сообщений: 5308 Сила слова: 1.51
|
хз
|
|
|
|
|
Записан
|
Эксперт — это человек, который в узкой области допустил все возможные ошибки. © Нильс Бор.
|
|
|
|
phpdude ↓
|
 |
|
19 Июль, 2011, 09:11:14 , спустя 8 минут 8 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
я - ЭМО
Группа: в ухо Карма: 339
Сообщений: д-о-х-у-я! Сила слова: 1.72
|
msg.Body.Replace("!", "")
пиздец ошибка критическая по факту. У тебя идентификатор команду боту - наличие ! в начале сообщения. нахуй менять везде то?) или это только одну замену произведет? я точно не помню а доку открывать лень.
по сути тебе тут сабстр надо было юзать да и все
|
|
|
|
|
Записан
|
забанен. могу забанить других, пишите в личку BEER. Helping ugly people have sex since 1862.
|
|
|
|
Frozzeg ↓
|
 |
|
19 Июль, 2011, 09:24:08 , спустя 12 минут 54 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Санитары Карма: 80
Сообщений: 5308 Сила слова: 1.51
|
да пиздец ))
|
|
|
|
|
Записан
|
Эксперт — это человек, который в узкой области допустил все возможные ошибки. © Нильс Бор.
|
|
|
|
phpdude ↓
|
 |
|
19 Июль, 2011, 09:25:01 , спустя 53 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
я - ЭМО
Группа: в ухо Карма: 339
Сообщений: 19718 Сила слова: 1.72
|
да пиздец ))
HEADSHOT!!! MULTIKILL!!!!
|
|
|
|
|
Записан
|
забанен. могу забанить других, пишите в личку BEER. Helping ugly people have sex since 1862.
|
|
|
|
megajohn ↓
|
 |
|
10 Октябрь, 2011, 06:08:07 , спустя 83 дня 8 часов 43 минуты 6 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Карма: 0
Сообщений: 1 Сила слова: 0
|
По непонятным причинам метод skype_MessageStatus вызывается дважды.
это потому что status не анализируется, а там cmsReceived либо cmsSent либо еще всякое
|
|
|
|
|
Записан
|
|
|
|
|
Sinkler ↓
|
 |
|
10 Октябрь, 2011, 06:12:04 , спустя 3 минуты 57 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Похуй, пляшем!
Группа: Джедаи Карма: 61
Сообщений: 6102 Сила слова: 1
|
чет много развелось не пхпшников
|
|
|
|
|
Записан
|
|
|
|
|
Frozzeg ↓
|
 |
|
10 Октябрь, 2011, 07:29:56 , спустя 1 час 17 минут 52 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Санитары Карма: 80
Сообщений: 5308 Сила слова: 1.51
|
megajohn, это было давно и неправда
|
|
|
|
|
Записан
|
Эксперт — это человек, который в узкой области допустил все возможные ошибки. © Нильс Бор.
|
|
|
|
Nickitee ↓
|
 |
|
11 Октябрь, 2011, 08:32:35 , спустя 1 день 1 час 2 минуты 39 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Карма: 0
Сообщений: 1 Сила слова: 0
|
Полезная тема, но был просто убит на повал, когда на одном форуме нашёл темку где продаётся "cпамер" Skype за 70$, ему краснючая цена 5$, тем более что всё на ладони.
Если кому пригодится, то вот пример как проверить приатачился скайп или нет.
После объявления скайпа:
((_ISkypeEvents_Event)skype).AttachmentStatus += AttachedOrNot;
bool attached = false;
Сама функция:
private void AttachedOrNot(TAttachmentStatus status)
{
if (status == TAttachmentStatus.apiAttachPendingAuthorization)
{
richTextBox1.AppendText("\nAttaching to Skype...");
}
if (status == TAttachmentStatus.apiAttachSuccess)
{
richTextBox1.AppendText("\nSkype attached!");
attached = true;
}
if (status != TAttachmentStatus.apiAttachPendingAuthorization && status != TAttachmentStatus.apiAttachSuccess)
{
richTextBox1.AppendText("\n" + status.ToString());
}
}
и код на ту же кнопку:
try
{
if (skype.Client.IsRunning)
{
if (attached)
{ }
else
{
skype.Attach(7, false);
}
}
else
{
richTextBox1.AppendText("\n Skype is not running, please start Skype and try attach again");
}
}
catch (Exception ex)
{
richTextBox1.AppendText("\n" + ex.Message);
}
|
|
|
|
|
Записан
|
|
|
|
|
AngelicCare ↓
|
 |
|
28 Декабрь, 2011, 07:06:24 , спустя 77 дней 10 часов 33 минуты 49 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
|
Карма: 0
Сообщений: 1 Сила слова: 0
|
Исправлен баг
using System;
using System. Windows. Forms;
using SKYPE4COMLib;
class HelloWorld
{
// public static int Main(string[] args)
static void Main (string[] args )
{
System. Windows. Forms. Application. Run(new MyWindow ());
}
}
class MyWindow: Form
{
//конструктор
private static Skype skype;
static uint ProcCallCount = 0;
public MyWindow () {
System. Console. WriteLine("Initializing Skype...");
skype = new Skype ();
// Совокупляемся со скайпом))
skype. Attach(8, false);
// Начинаем слушать сообщения
skype. MessageStatus += new _ISkypeEvents_MessageStatusEventHandler (skype_MessageStatus );
}
private static void skype_MessageStatus (ChatMessage msg, TChatMessageStatus status )
{
// Если в начале сообщения стоит символ "!"
if (msg. Body. IndexOf("!") == 0)
{
ProcCallCount++; // увеличиваем количество вызванных обработчиков
Console. WriteLine("Incoming Skype Message: " + msg. Body + " status:" + status. ToString());
// если обработчик вызван по получении - обрабатываем команду !time и отсылаем результат клиенту
if(status. ToString() == "cmsRead") // другой раз - при уведомлении о том, что пользователь прочёл (получил доступ к тексту сообщения)
return;
// Отсылаем результат клиенту
skype. SendMessage(msg. Sender. Handle, SkypeCommandHandler (msg. Body. Substring(1)));
}
}
private static string SkypeCommandHandler (string str )
{
string result = "";
switch (str. ToLower())
{
case "time":
result = "Current Time is: " + DateTime. Now. ToLongTimeString();
break;
}
return result;
}
}
|
|
|
|
|
Записан
|
|
|
|
|
Ivan ↓
|
 |
|
28 Декабрь, 2011, 07:26:32 , спустя 20 минут 8 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Адекваты Карма: 19
Сообщений: 922 Сила слова: 2.06
|
Если в начале сообщения стоит символ "!"
Тогда зачем осуществлять поиск по строке?) Или в C# нельзя строку по символам разбирать? В перл/пхп можно Спустя 3 минуты добавил string result = "";
А просто string result что сделает?)
Какая-то странная конструкция - class MyWindow: Form, и System.Console.WriteLine("Initializing Skype...");
Странный язык у балмера... Спустя 2 минуты 20 секунд добавил И какой тут смысл в ProcCallCount если она ни в чем не используется? Спустя 2 минуты 3 секунды добавил Хе, C# мне незнаком, но такое ощуещение что весь код понимаю
|
|
|
|
|
Записан
|
#define TRUE FALSE // удачной отладки суки
|
|
|
|