Skype C# API Выбор чата

Итак, я знаю, что этот API довольно старый и очень недокументированный, именно поэтому я задаю ТАК вопрос, поэтому я хотел знать, как я могу выбрать чат в Skype с помощью C# Skype Desktop API, я немного поискал вокруг, но большинство людей, кажется, используют WinForms для создания своего приложения, мое простое консольное приложение, код:

Skype Skype = new Skype();
Skype.Attach(5, true);

Skype.Chat.SendMessage("Hello ??");

Parser.Pause();

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

Есть ли способ легко сослаться на чат, используя определенный код? и т.д... Спасибо!


person Jack Hales    schedule 14.10.2016    source источник


Ответы (1)


Я построил этот фрагмент, который должен помочь вам...

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Remoting.Channels;
using System.Text;
using System.Threading.Tasks;
using SKYPE4COMLib;

namespace skypeExperiment
{
    class Program
    {   
        static void Main(string[] args)
        {
            Skype s = new Skype();
            s.Attach();
            if (!s.Client.IsRunning)
            {
                // start minimized with no splash screen
                s.Client.Start(true, true);
            }

            // wait for the client to be connected and ready
            //you have to click in skype on the "Allow application" button which has popped up there
            //to allow this application to communicate with skype
            s.Attach(6, true);

            //this will print out all the chat names to the console
            //it will enumerate all the chats you've been in
            foreach (Chat ch in s.Chats)
            {
                Console.WriteLine(ch.Name);
            }

            //pick one chat name of the enumerated ones and get the chat object
            string chatName = "#someskypeuser/someskypeuser;9693a13447736b9";
            Chat chat = GetChatByName(s, chatName);
            //send a message to the selected chat
            if (chat != null)
            {
                chat.SendMessage("test");
            }
            else
            {
                Console.WriteLine("Chat with that name was not found.");
            }

            Console.WriteLine("Press any key to continue...");
            Console.ReadKey();
        }

        private static Chat GetChatByName(Skype client, string chatName)
        {
            foreach (Chat chat in client.Chats)
            {
                if (chat.Name == chatName) return chat;
            }
            return null;
        }


    }
}

Вместо использования существующего объекта чата вы можете создать новый объект чата с помощью метода

Chat chat = s.CreateChatWith("name of the user to chat with");
chat.SendMessage("test");

Вы можете создать групповой чат с:

Group mygroup = s.CreateGroup("mygroup");
mygroup.AddUser("user1");
mygroup.AddUser("user2");
Chat myGroupChat = s.CreateChatMultiple(mygroup.Users);
myGroupChat.SendMessage("test");

или создать метод для получения группы по отображаемому имени

private static Group GetGroupByDisplayName(Skype client, string groupDisplayName)
{
    foreach (Group g in client.Groups)
    {
        if (g.DisplayName == groupDisplayName)
        {
            return g;
        }
    }
    return null;
}

и используйте его, например:

Group majesticSubwayGroup = GetGroupByDisplayName("majesticsubway"); 
Chat majesticSubwayGroupChat = s.CreateChatMultiple(majesticSubwayGroup.Users);
majesticSubwayGroupChat.SendMessage("test");
person michalh    schedule 14.10.2016
comment
Так что насчет группового чата? Это пример снимка экрана группы: prntscr.com/ctnr41 Я думал, что он сможет выбрать группа по идентификатору приглашения или по названию группы, например majesticsubway? :-) - person Jack Hales; 14.10.2016
comment
Спасибо, позвольте мне попробовать! - person Jack Hales; 14.10.2016