Простой бот для Skype на C++ Qt (ActiveX)

    Всем привет! Недавно от скуки написал Skype бота. Решил поделится, может быть кому нибудь пригодятся исходники, да и сам бот.

    image

    В посте я не буду утомлять рассказами о коде, так как в исходниках все можно будет наглядно увидеть и понять, что к чему по названиям переменных, классов, методов и по комментариям.

    В программе реализованы некоторые возможности:
    • Соединение с COM сервером скайпа
    • Отсоединение от COM сервера скайпа
    • Запуск скайпа
    • Закрытия скайпа
    • Обновления словаря не пере запуская программу «Словарь->Перечитать»
    • Выбор чатов в которых будет идти диалог «Чаты->Список чатов»
    • Сворачивается в system tray



    Для работы программы нужен файл config.xml который должен находится в одном каталоге с exe программой.

    Настройка Skype Бота


    Для сохранения настроек необходим файл config.xml, который должен находится в одном каталоге с SkypeBot.exe. В этом файле хранится как словарь для бота, так и его настройки:

    Структура config.xml такова:

    <?xml version="1.0" encoding="UTF-8"?>
    <main>
         <t reg="(привет|здраствуй)">
               <reply>Привет</reply>
               <reply>Здорова</reply>
               <reply>Хай</reply>
         </t>
         <t reg="(Как дела|Как ты)">
               <reply>Нормально, у тебя как?</reply>
               <reply>Хорошо</reply>
         </t>
         <namechat>#cj1900/$e9e3e97f93c86546</namechat>
    </main>
    


    Тег t содержит ключ, на который будет выдавать ответ бот и сами ответы.
    Ключ хранится в атрибуте тега t и называется reg. Внутри тега reg хранятся слова, заключенные в скобках и пишущиеся через символ |. Когда кто-то в чате пишет сообщения, бот находит одно из слов в ключе и если есть совпадения, отвечает на него случайной фразой заключенных тегом reply.

    Ключей как и ответов может быть сколько угодно.

    Далее идет тег namechat. Там хранится имя чата, его редактирует сама программа, в нем находится название чатов, в которых вы хотите вести диалог с ботом.

    Вот окно выбора чатов:

    image

    К сожалению, по какой то причине Skype не всегда показывает все чаты через ActiveX, я так и не смог решить эту проблему.

    Ссылки на файлы


    Ссылка на исходники на disk.yandex.ru
    Ссылка на исходники на github.com
    Ссылка на программу SkypeBot
    Единственная подробная документация для SkypeApi, написанная для visual basic
    Поделиться публикацией

    Комментарии 18

      0
      Почему не GitHub?
        0
        ок, перезалью. Просто сейчас не пользуюсь им.
          0
          Спасибо. Не всегда есть возможность посмотреть архив.
        +3
        Skype-api разве ещё работает?
          +1
          Да, работают, можете проверить.
          +1
          Работает. Win8x64, Skype 6.18.0.106
          Спасибо.
            0
            skype4py же есть, зачем велосипедить?
              0
              Это вы о чем?
                0
                  +3
                  1. Я об этом не знал.
                  2. Для меня как думаю и для других c++, и Qt удобнее (Но дело вкуса)
                  3. Здесь я просто решил поделится исходниками, а не программой, так как сам сперва искал исходники на Qt. Но не нашел.
                  4. Даже если бы я знал о skype4py, я не работал с Python, и все равно бы писал на Qt
              0
              У меня приложение падает в ошибку.
              Unhandled exception at 0x003533E5 in SkypeBot.exe: 0xC0000005: Access violation reading location 0x0000000C.
              

              Windows 8.1 x64
              skype 6.21.0.104
                +1
                Интересно, у меня стоит этот же Skype на Windows 7 64/32, Windows 8 64 и Windows 8.1 64, но такой ошибки не было, Подозреваю что эта ошибка из за того что не запущен com server skype. Но воспроизвести эту ошибку не удается, так как у меня skype автоматически запускает com server в любом случае.
                  0
                  так как у меня skype автоматически запускает com server в любом случае.

                  Это выглядит как отдельный процесс?
                    0
                    нет, это не выглядит как отдельный процесс.
                      0
                      Можете попробовать зайти «Инструменты->Настройки->Жополнительно->Контроль доступа других программ к Skype» в Skype, и отчистить список программ использующих скайп. Но это так предположение.
                        0
                        Спасибо за тех.поддержку. Но не помогло ;)
                        Попробовал еще пару разных вариантов, которые пришли на ум, но нет.
                        А жаль…
                          0
                          поробовал Windown 10 x64
                          Skype: 7.0.0.102
                          Работает ;)
                          Но пока это не моя основная рабочая конфигурация. Как-то явный индивидуальный глюк.
                            0
                            Да, это явно что то индивидуальное, я проверял с разными версиями Skype и ОС, которые смог найти, но подобного не было.

                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                  Самое читаемое