folder Tahribat.com Forumları
linefolder C#, Asp.Net, .Net Core
linefolder Dotmsn Kütüphanesini Kullanarak Msn Botu Yapımı - C#.NET



Dotmsn Kütüphanesini Kullanarak Msn Botu Yapımı - C#.NET

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    SharpShooter
    SharpShooter's avatar
    Banlanmış Üye
    Kayıt Tarihi: 10/Temmuz/2008
    Erkek

    Merhaba arkadaşlar;

    Bugün vakit öldürmek için yaptığım bir uygulamayı sizlerle paylaşmak istiyorum.

    Kodları verip, ahanda budur demek yerine. Satır satır anlatmaya çalışıcam neyi niçin yaptık diye. Gerçi pek anlatılacak bir şeyi yok :)

    Evet ilk olarak dotmsn dll’ini projemize referans olarak ekliyoruz.

    http://img526.imageshack.us/img526/4363/12410940.png

    isteğe göre aşağıdaki gibi bir tasarım yapılabilir;

    http://img34.imageshack.us/img34/1149/92155730.png

     

    http://img265.imageshack.us/img265/6272/49294398.png

    http://img526.imageshack.us/img526/5272/94027337.png

    http://img175.imageshack.us/img175/7365/47646308.png

     

    Dotmsn Kütüphanesi ve daha ayrıntılı bilgi için: http://www.xihsolutions.net/dotmsn/

    Kaynak göstermeden paylaşmazsanız sevinirim. Konu hakkında soru veya önerilerinizi lütfen konuya cevap yazarak belirtiniz.

    Herkese iyi çalışmalar

     


    - xx yerde hata var. - ya aslında kod şöyle sanıyor olabilir bla bla bla - olm kendine gel kodlar düşünmez - ...
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    SharpShooter
    SharpShooter's avatar
    Banlanmış Üye
    Kayıt Tarihi: 10/Temmuz/2008
    Erkek

    unutmadan son resimde, google translate alt yapısı kullanılarak çeviri yapan kodlar mevcut.

    en sade haliyle kodları yazıyorum, tabi ki daha çok geliştirilebilir;

                string adres = "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=" + e.Message.Text + "&langpair=tr|en";
                WebResponse gidenSoru; System.Net.WebRequest objRequest = System.Net.HttpWebRequest.Create(adres);
                gidenSoru = objRequest.GetResponse();
                StreamReader gelenCevap = new StreamReader(gidenSoru.GetResponseStream());
                string gelen = gelenCevap.ReadToEnd();
                int kelimedenSonrakiIndex = gelen.Substring(36).IndexOf('"');
                sender.SendMessage(gelen.Substring(36).Substring(0, kelimedenSonrakiIndex));


    - xx yerde hata var. - ya aslında kod şöyle sanıyor olabilir bla bla bla - olm kendine gel kodlar düşünmez - ...
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    lepusmorris
    lepusmorris's avatar
    Kayıt Tarihi: 31/Mart/2007
    Erkek

    hocam acces database bağlantısını nasıl yapabiliriz. yani kelimeleri accessden çeksin.  gelen bi yazıya verilebilcek cevap 4 tane olsun. bunlara random değeri versek
    örn: slm yazdı karşıdaki

    1. tabloda aleyküm selam, 2.de merhaba vs vs gibi

    databasede olmayan kelime için 5 farklı anlamadım yazısı olsa. bunlarıda dbden değiştirebilsek. bunlarda da random olsa.

    bu tarz bişeyi nasıl yapabiliriz. zamanını alır mı_?


    ..
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    CaNNi
    CaNNi's avatar
    Banlanmış Üye
    Kayıt Tarihi: 10/Ekim/2007
    Erkek

    anlamadığım yazınlara göre kendi kütüphanesini otomatikmen genişletebiliyormu? bişey yapmadan :D


    sitem hep âşinâlardan gelir bîgâneden gelmez!
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    FCN
    FCN's avatar
    Kayıt Tarihi: 28/Eylül/2007
    Erkek

    sharp gerçekten eline saglık işime yaricak

  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Ercan
    Ercan's avatar
    Kayıt Tarihi: 04/Temmuz/2008
    Erkek

    lepusmorris bunu yazdı:
    -----------------------------

    hocam acces database bağlantısını nasıl yapabiliriz. yani kelimeleri accessden çeksin.  gelen bi yazıya verilebilcek cevap 4 tane olsun. bunlara random değeri versek
    örn: slm yazdı karşıdaki

    1. tabloda aleyküm selam, 2.de merhaba vs vs gibi

    databasede olmayan kelime için 5 farklı anlamadım yazısı olsa. bunlarıda dbden değiştirebilsek. bunlarda da random olsa.

    bu tarz bişeyi nasıl yapabiliriz. zamanını alır mı_?


    -----------------------------

    konuyu okurken db ile birleştirmeyi düşünüyordum, benim aklımda ki tasarım biraz daha farklı gelen mesaja cevap verirken 4 tane cevap sınırlaması koymadan bir tanede olabilir iki tanede de olabilir veya daha fazla sonra random olarak cevabı versin veya istenilen cevab ile yanıtlansın... :) yarın canım sıkılırsa yapmaya çalışırım :)


    IF YOU ARE NOT TİRED, YOU ARE NOT DOING IT RIGHT
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    wert
    wert's avatar
    Kayıt Tarihi: 19/Eylül/2005
    Erkek

    sağol dai işe yarar :)


    |sadece aptalların başarısı ders notu ile ölçülür|
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    SharpShooter
    SharpShooter's avatar
    Banlanmış Üye
    Kayıt Tarihi: 10/Temmuz/2008
    Erkek

    lepusmorris bunu yazdı:
    -----------------------------

    hocam acces database bağlantısını nasıl yapabiliriz. yani kelimeleri accessden çeksin.  gelen bi yazıya verilebilcek cevap 4 tane olsun. bunlara random değeri versek
    örn: slm yazdı karşıdaki

    1. tabloda aleyküm selam, 2.de merhaba vs vs gibi

    databasede olmayan kelime için 5 farklı anlamadım yazısı olsa. bunlarıda dbden değiştirebilsek. bunlarda da random olsa.

    bu tarz bişeyi nasıl yapabiliriz. zamanını alır mı_?


    -----------------------------

    aslında bugün öyle bir şey de yazdım, biraz ayrıntıya girdim,madem ilgilenen var paylaşayım kısaca;

    şimdi önce veritabanı tasarımından bi resim atayım

    http://img69.imageshack.us/img69/901/17499053.png

    şimdi önce kişi ile daha önce konuşulmuş mu ona bakıyorum,

    eğer konuşulmamışsa , kişinin onayını alıp ona göre veritabanına kaydediyorum. ilgili kodlar;

    Kisiler konusulanKisi = datamodel.Kisiler.FirstOrDefault(p => p.KisiMail == konusulanKisininMailAdresi);
                if (konusulanKisi == null)
                {
                    if (e.Message.Text == "Hayır\0")
                    {
                        sender.SendMessage("Sizi Kaydetmeme İzin Vermediğiniz İçin Kaydetmedim.");
                    }
                    else if (e.Message.Text != "Evet")
                    {
                        verilecekCevap = "Merhaba, \n Sizi Daha Önce Hiç Görmedim, Benimle Konuşmak İçin Sizi Veritabanıma Kaydetmem Gerekiyor. Kabul Ediyorsanız 'Evet', Kabul Etmiyorsanız 'Hayır' Yazın.";
                        sender.SendMessage(verilecekCevap);
                    }
                    else
                    {
                        Kisiler yeniKisi = new Kisiler()
                        {
                            KisiMail = konusulanKisininMailAdresi,
                            Nick = e.Sender.Name,
                            Samimiyet = 1,
                            SonGorusme = DateTime.Now,
                            EklenmeTarihi = DateTime.Now,
                        };

                        datamodel.AddToKisiler(yeniKisi);
                        datamodel.SaveChanges();
                        sender.SendMessage("Sizi Kaydetmeme İzin Verdiğiniz İçin Teşekkürler (:, Artık Konuşmaya Hazırız (:");
                    }

     

    şimdi sırada ki adım; konuşma dağarcığını doldurmak. onunda kodu şöyle;

     konusmaDagarcigi = (from d in datamodel.Konusmalar where d.GelenYazi.ToLower() == GelenYazi && d.Samimiyet == konusulanKisi.Samimiyet select d).ToList();

    gelen yazı ve konuştuğum kişinin samimiyetine bağlı olarak verebileceğim cevapları bir list'e dolduruyorum. samimiyet kavramı nedir dersen şöyle;

    ilk eklenen adamın samimiyeti 1'dir. 5 ay konuştuğun kişinin samimiyeti 8 dir.

    samimiyeti 1 olan cevaplar ve samimiyeti 8 olan cevaplar var veritabanında.

    Örnek; samimiyeti 1 olan adam sana "selam" yazarsa , bot "selam nasılsınız" yazar.

    ama samimiyeti 8 olan adam sana "selam" yazarsa, bot "oo baba nerelerdesin ya ?" yazar.

    şimdi bir sorunun birden çok cevabı olabilir. herkese ayrı ayrı yazsın dersen şöyle bir mantık kurulabilir. onunda kodu şöyle;

                    int dagarciktakiMesajAdedi = konusmaDagarcigi.Count;
                    int secilenIndex = randomNesnesi.Next(0, konusmaDagarcigi.Count - 1);
                    Konusmalar secilenCevap = konusmaDagarcigi.ElementAt(secilenIndex);

                    sender.SendMessage(secilenCevap.GonderilecekYazi);

    ee birde bot'un nelere cevap verip nelere cevap veremediğini bilmek istersin. onuda gelişmiş bir log katmanıyla öğrenebilirsin. mesela botun kelime dağarcığında hiç cevap yoksa

    if (konusmaDagarcigi.Count == 0)
                {
                    Ogrenilecekler kontrol = datamodel.Ogrenilecekler.FirstOrDefault(p => p.GelenYazi.ToLower() == GelenYazi);
                    if (kontrol != null)
                    {
                        verilecekCevap = "Yazdığınız Kelimeye Karşılık Bir Cevabım Yok Çünkü, Yazdığınız Kelime 'Öğrenilecekler' Bölümünde. Öğrenmemi Bekliyor (:";
                        konusmaLogu.GelenYazi = e.Message.Text;
                        konusmaLogu.GidenYazi = verilecekCevap;

                        if (konusulanKisi == null)
                            konusmaLogu.KonusulanKisiMail = konusulanKisininMailAdresi;
                        else

                            konusmaLogu.Kisiler = konusulanKisi;

                        fark = DateTime.Now - yazmaTarihi;
                        sender.SendMessage(verilecekCevap);
                        konusmaLogu.CevaplanmaSuresi = Convert.ToDecimal(fark.TotalSeconds);
                        konusmaLogu.Tarih = DateTime.Now;

                        datamodel.AddToKonusmaGecmisi(konusmaLogu);
                        datamodel.SaveChanges();
                        return;
                    }

                    Ogrenilecekler yeniBilgi = new Ogrenilecekler()
                    {
                        GelenYazi = GelenYazi,
                        OgrenildiMi = false,
                        Tarih = DateTime.Now
                    };
                    if (konusulanKisi == null)
                        yeniBilgi.GonderenMail = konusulanKisininMailAdresi;
                    else
                        yeniBilgi.Kisiler = konusulanKisi;
                    datamodel.AddToOgrenilecekler(yeniBilgi);
                    datamodel.SaveChanges();

                    verilecekCevap = "Korkarım Yazdığınız Şeyi Anlayamadım, Yazdığınız Şeyi Hafızam da 'Öğrenilecekler' Bölümüne Kaydettim. En Kısa Sürede Öğreneceğimden Emin Olabilirsiniz. Teşekkürler (:";

                    konusmaLogu.GelenYazi = e.Message.Text;
                    konusmaLogu.GidenYazi = verilecekCevap;
                    if (konusulanKisi == null)
                        konusmaLogu.KonusulanKisiMail = konusulanKisininMailAdresi;
                    else
                        konusmaLogu.Kisiler = konusulanKisi;

                    fark = DateTime.Now - yazmaTarihi;
                    sender.SendMessage(verilecekCevap);
                    konusmaLogu.CevaplanmaSuresi = Convert.ToDecimal(fark.TotalSeconds);
                    konusmaLogu.Tarih = DateTime.Now;

                    datamodel.AddToKonusmaGecmisi(konusmaLogu);
                    datamodel.SaveChanges();

    }

    gibi yazılabilir. ben her şeyi logladığım için arada log katmanına giden kodlarda var. onlar kafanı karıştırmasın

    iyi çalışmalar


    - xx yerde hata var. - ya aslında kod şöyle sanıyor olabilir bla bla bla - olm kendine gel kodlar düşünmez - ...
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    SharpShooter
    SharpShooter's avatar
    Banlanmış Üye
    Kayıt Tarihi: 10/Temmuz/2008
    Erkek

    CaNNi bunu yazdı:
    -----------------------------

    anlamadığım yazınlara göre kendi kütüphanesini otomatikmen genişletebiliyormu? bişey yapmadan :D


    -----------------------------

    kendi kendine gelişmesi mümkün değil malesef, ama log katmanıyla kelime dağarcığını geliştirmek oldukça kolaylaşıyor. konuşma botu yapımı biraz amelelik gibi göründü şahsen bana, örneğin; her dakika browser'ı açıp ingilizce sözlük'e girmektense, direk msnden botuma yazıyorum çeviriyo. bu tip işlerde kullanılabilir.


    - xx yerde hata var. - ya aslında kod şöyle sanıyor olabilir bla bla bla - olm kendine gel kodlar düşünmez - ...
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Rmk
    Rmk's avatar
    Kayıt Tarihi: 27/Ağustos/2005
    Erkek

    :) bu adam bu işi biliyor, ögrenmeye de devam ediyor tebrikler basarili yolunda


    Koyun gibisin kardesim, gocuklu celep kaldirinca sopasini sürüye katiliverirsin hemen ve adeta magrur, kosarsin salhaneye. Dünyanin en tuhaf mahlukusun yani, hani su derya icre olup deryayi bilmiyen baliktan da tuhaf. Ve bu dünyada, bu zulüm senin sayende. Ve açsak, yorgunsak, alkan içindeysek eger ve hala sarabimizi vermek için üzüm gibi eziliyorsak kabahat senin, -demege de dilim varmiyor ama- kabahatin
  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    cemnet
    cemnet's avatar
    Kayıt Tarihi: 18/Eylül/2007
    Erkek

    Sitesinden dll'i ekleyip projeye referans ettiğimde Contact metodunun tipi void olduğundan kullanıcı adı gibi parametreleri almadı bende. Sana zahmet kullandığın dllyi bi yere upload edermisin ?

Toplam Hit: 9840 Toplam Mesaj: 35