SkypeBot v C#

C# .NET Pro pokročilé SkypeBot v C#

V dnešním tutoriálu se naučíme vytvořit vlastního skypebota, který za nás bude odpovídat, když se s někým nebudeme chtít bavit.

Co je třeba?

  • Silné nervy
  • 10 minut času
  • Kafe a jídlo

Začínáme

Jako první si založíme projekt Windows Forms Aplications (Visual C#)a pojmenujeme si jej třeba SkypeBot.

Po úspěšném vygenerování projektu si hned stáhneme knihovnu SKYPE4COM (ke stažení je zde )

do projektu jí dostaneme : v menu: Project/Add Resource a vyhledáme stažený soubor .dll .

Ihned přidáme using:

using SKYPE4COMLib;

Teď se vrhneme na nastavení Skype bota:

private Skype skype;
private const string nick = "BOT"; //jméno bota

Dále si do Form1_Load přidáme:

skype = new Skype();
// použije skype protokol 7
skype.Attach(7, false);
// poslouchá
skype.MessageStatus += new _ISkypeEvents_MessageStatusEventHandler(skype_MessageStatus);

Dále si vytvoříme private metodu pro handler, který jsme definovali výše:

private void skype_MessageStatus(ChatMessage msg, TChatMessageStatus status)
{
    // Pokud existuje zpráva a nejedná se o zprávu odeslanou
    if ((msg.Body != null) && (status == TChatMessageStatus.cmsReceived))
    {
        // odešlě zprávu zpět do skype chatu
        skype.SendMessage(msg.Sender.Handle, nick + " Říka: " + ProcessCommand(msg.Body.ToLower()));
    }
}

Definujeme si odpovědi a otázky:

private string ProcessCommand(string str)
{
    switch (str.ToLower())
    {
        case "help":
            return "napoveda";
        default:
            return "Omlouvám se, ale nerozumím ti. Napiš help pro nápovedu";
    }
}

Dále asi ta nejduležitější část , povolení přístupu k programu.

Když spustíte aplikaci (musí obsahovat SKYPE4COM.dll) tak vám Skype napíše, jestli chcete povolit využívat aplikaci Skype, povolíte.

Toť vše.

Pokud se vám tutoriál líbil, tak ať se vám hodí. Pokud budou jakékoliv neshody, napište do komentářů


 

Stáhnout

Staženo 523x (60.45 kB)

 

  Aktivity (1)

Článek pro vás napsal jakub
Avatar
Autor se věnuje programování v HTML,CSS a nově i v jazyce LabView

Jak se ti líbí článek?
Celkem (3 hlasů) :
2.333332.33333 2.333332.333332.33333


 


Miniatura
Všechny články v sekci
C# - Pro pokročilé

 

 

Komentáře
Zobrazit starší komentáře (7)

Avatar
jakub
Redaktor
Avatar
jakub:

Ahoj,zprávy které napíšeš to neposlouchá,jen ty co napíše osoba na druhé straně skype. Mně vše funguje jak má,nsatavil sis přístup do skype?(musíš,bez toho to nebude fungovat),ještě to přidam do článku.

EDIT::Odeslal jsem k publikaci edit článku,je tam ve stručnosti popsáno co a jak.

Editováno 25.10.2012 10:02
Odpovědět 25.10.2012 9:59
Uvnitř jsou všichni stejní...
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na jakub
Daniel Vítek:

j to jsem povolil...
ale ještě se mi stává že to odpoví třeba 10x...

 
Odpovědět 25.10.2012 10:49
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na jakub
Daniel Vítek:

jakub
...stáhl jsem si zdrojáky, nic jsem neupravoval,spustil jsem, z 2. počítače jsem si poslal zprávu (jiný skype účet)...
Odpověď byla -

BOT Říka: Omlouvám se, ale nerozumím ti. Napiš help pro nápovedu
BOT Říka: Omlouvám se, ale nerozumím ti. Napiš help pro nápovedu

= odpověděl 2x
Poté mi Visual Studio zahlásilo
Invalid user handle
u řádku

skype.SendMessage(msg.Sender.Handle, nick + " Říka: " + ProcessCommand(command));

...nemáš tu třeba strarý zdrojáky ?

 
Odpovědět 25.10.2012 12:50
Avatar
jakub
Neregistrovaný
Avatar
Odpovídá na Daniel Vítek
jakub:

Kouknu se na to.

 
Odpovědět 25.10.2012 12:57
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na jakub
Daniel Vítek:

jakub
...již v mém předchozím příspěvku jsem psal že se mi zdá jako by si to četlo i ty svoje,takže jsem vyzkoušel toto -

private void skype_MessageStatus(ChatMessage msg, TChatMessageStatus status)
        {
            // Když se počet zpráv je větší než 0
            if (msg.Body.IndexOf(trigger) >= 0)
            {
                string odesilatel = msg.Sender.Handle;
                if (odesilatel != "bobikdaniel1")
                {
                    // načte zprávu
                    string command = msg.Body.Remove(0, trigger.Length).ToLower();

                    // odešlě zprávu zpět do skype chatu
                    skype.SendMessage(odesilatel, nick + " Říka: " + ProcessCommand(command));
                }
            }
        }

to funguje,a posílá to i jen jednu zprávu ;)

bobikdaniel1 - muj skype nick

Editováno 25.10.2012 13:02
 
Odpovědět 25.10.2012 13:01
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Daniel Vítek
Daniel Vítek:

jakub ...A jak to asi dopadlo ? :D
Nasázel jsem tam 2 zprávy se 150-ti znakovým Lorem ipsum...na každej to odpovědělo jedním "Omlouvám se..........."
No, počkal jsem asi 2 minuty (šel jsem si pro jídlo) a nasázelo to tam další 3 zprávy...
Nevíš čím to muže být ?

 
Odpovědět 25.10.2012 13:10
Avatar
jakub
Neregistrovaný
Avatar
jakub:

tak to nwm,asi to celý předělam,nefugnuje to totiž úplně pokaždý.

 
Odpovědět 25.10.2012 14:38
Avatar
David Jančík [sczdavos]:

Tam se musí dát podmínka, že pokud zpráva není od odesílatele. V tom Skype4COM je na to přímo konstanta. Používám to v Elis. Přesně si to nepamatuju...

Odpovědět 25.10.2012 16:05
Čím více času dostaneš, tím méně ho máš.
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
 
Odpovědět 25.10.2012 16:06
Avatar
Motlja
Člen
Avatar
Motlja:

Mohl by mi prosím někdo poslat to dll skype už mi to nechce dát

Odpovědět 26.8.2013 15:48
Umím a učím se to co chci, to co mě baví a zajímá!!
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 17. Zobrazit vše