
Often, newcomers in a particular IT field experience an acute shortage of knowledge and acquaintances who can “ask” something on the subject. Yes, StackOverflow, Google and other similar resources are just a storehouse of useful information, however, you see, there are situations when the question is so general that the answer to it can only be given by an experienced person working in this field for more than a year.
For the most part, this concerns these very newbies, because experienced IT specialists are not only able to pull out another's soul from Google, so they usually have enough acquaintances in this area - the issue will be solved one way or another.
And here the thought has flown by - why not make IT-chats and break them up into specific topics / technologies? Ok, let's try. And Skype will help us here.
')
If you want to know why Skype was chosen, how you can “get around” the limit of 300 people for one chat, or you just hid an altruistic IT note and you love to help colleagues - take cookies and
welcome under the cat .
Why skype
There are many online boards / forums where you can go and ask your specific question. However, there are several BUT:
1) It is there. And Skype is here. And between these "there" and "here" in my opinion - the abyss. To ask someone to do something, to go somewhere there, to register somewhere there is an unreal case. As the techies say and sold - the conversion will be zero. Seriously, people are lazy, especially when not motivated, so we try to simplify the “entrance” as much as possible and try to use what everyone has at hand.
2) Ping. You logged in, wrote and ... wait. Clarifying the question may be delayed for days. Therefore, we don’t write, and if we write, it is only in quite scandalous situations, where neither friends nor Google could help us, but usually there are not too many such questions for each individual person, right?
Of course there are also disadvantages of such a solution:
1) Skype. It is not as good as we would like, but it provides basic functionality for managing groups, which is not bad at all.
2) No message history. No, you can certainly scroll to the nth moment, but we all understand that this is not the search that is required.
3) Ability to spam. A conversation between two people will affect everyone. / alertsoff will be here the best friend and companion.
In my opinion, the advantages outweigh, because when there is a goal - all obstacles are only obstacles, aren’t they? It would be a desire, and Morse code can be tapped with neighbors.
How to fit everyone?
Skype for some reason made a limit of 300 members per group. Why, in general, is understandable, but it does not suit us. What if in certain chats want to go more than three hundred people? I found a way to synchronize several chats among each other through the
Chat bot written in my free time. He will help us by linking the necessary chats among themselves by broadcasting messages from one group to another and vice versa. Crutch Crutch But what to do.
How this sync works. Chunks of implementation and explanation of the binding mechanism. C #Bot needs to be attached to something. The topic of the group was not the best solution, and I found that when I tried to take the Name of the chat, I gave api its id.
This id is in every chat and it is unique. You can get it only through api. To find it out, you need to add a bot (skypename: "mensclubbot" or your personal running implementation / fork) in both chat rooms and execute the "! Get id" command in each of them, after which the bot will issue a unique chat id.
Next, go to app.config and set up synchronization in a similar way:

Format:
- {id}: chat id;
- {group name} - the name of the group that members of the opposite chat will see, can be left blank, in which case the chat will not be indicated during the broadcast;
- {from}: the direction of broadcast messages. Maybe from, to, both.
In the end, you should have something like this:

You can add new configurations through ";".
Everything is ready, now messages from one chat are broadcast to another and vice versa. It looks something like this:

C # class sync codepublic class SkypeChatSyncer { private List<ChatSyncerRelation> chatSyncRelations { get; set; } public delegate void OnSendMessageRequiredDelegate(string message, string toSkypeId); public event OnSendMessageRequiredDelegate OnSendMessageRequired; public SkypeChatSyncer() { chatSyncRelations = new List<ChatSyncerRelation>(); LoadRelations(); } private void LoadRelations() { string configValue = ConfigurationManager.AppSettings["ChatSyncRelations"]; if (!string.IsNullOrEmpty(configValue)) { var relations = configValue.Split(';'); foreach (string relation in relations) { var relationParts = relation.Split('|'); if (relationParts.Length == 3) { var fromChatIdParts = relationParts[0]; var toChatIdParts = relationParts[2]; string relationOperator = relationParts[1]; if (relationOperator == "from") { string tempChatId = fromChatIdParts; fromChatIdParts = toChatIdParts; toChatIdParts = tempChatId; } chatSyncRelations.Add(new ChatSyncerRelation(fromChatIdParts, toChatIdParts)); if (relationOperator == "both") {
We use it like this class Program { private static Skype skype = new Skype(); private static HelloBot bot; private static SkypeChatSyncer chatSyncer; private static IDictionary<string,IChat> chats { get; set; } private static object _chatLocker = new object(); static void Main(string[] args) { bot = new HelloBot(); bot.OnErrorOccured += BotOnErrorOccured; Task.Run(delegate { try { skype.MessageStatus += OnMessageReceived; skype.Attach(5, true); chatSyncer = new SkypeChatSyncer(); //init chat sync chatSyncer.OnSendMessageRequired += ChatSyncerOnOnSendMessageRequired; Console.WriteLine("skype attached"); } catch (Exception ex) { Console.WriteLine("top lvl exception : " + ex.ToString()); } while (true) { Thread.Sleep(1000); } }); while (true) { Thread.Sleep(1000); } } private static void ChatSyncerOnOnSendMessageRequired(string message, string toSkypeId) { var chat = GetChatById(toSkypeId); if (chat != null) { SendMessage(message,chat); } } private static IChat GetChatById(string chatId) { if (chats == null) { lock (_chatLocker) { if (chats == null) { chats = new Dictionary<string, IChat>(); foreach (IChat chat in skype.Chats) { string tChatId = chat.Name.Split(';').Last(); chats.Add(tChatId,chat); } } } } IChat toReturn = null; chats.TryGetValue(chatId, out toReturn); return toReturn; } static void BotOnErrorOccured(Exception ex) { Console.WriteLine(ex.ToString()); } private static void OnMessageReceived(ChatMessage pMessage, TChatMessageStatus status) { Console.WriteLine(status + pMessage.Body); if (status == TChatMessageStatus.cmsReceived) { bot.HandleMessage(pMessage.Body, answer => SendMessage(answer,pMessage.Chat),new SkypeData(pMessage)); string fromChatId = pMessage.Chat.Name.Split(';').Last(); chatSyncer.HandleMessage(pMessage.Body,pMessage.FromDisplayName,fromChatId); } } public static object _lock = new object(); private static void SendMessage(string message, IChat toChat) { if (message.StartsWith("/")) { message = "(heidy) " + message; } lock (_lock) { toChat.SendMessage(message); } } }
Well, okay, how can I see the chat list and join one of them?
You can see the list of chats here:docs.google.com/spreadsheets/d/1re0ntO6ZpPprYrMpKKuV_7I367Th30iRZWEL6ThXkUg is a chat list with a brief description. They are few, but if you need some more, then write, be sure to add.

You can directly follow this link:
jsfiddle.net/KTt3V/1 (it will change when adding new chats, so take it better better from the link above, on Googleboxes) and clicking on the group of interest. The browser picks up the Skype protocol and Skype connects you to the group.
Rules?
I understand that Skype alerts appear even if you turn them off via
/ alertsoff , so if you suddenly want to ask a question or answer it, or just chat, respect other members of the chat, try to write only on business.
Conclusion
I understand perfectly well that this decision is through the
Bender Bricks Plant , however, it is possible that some of these groups will still be useful to someone.
Links
You can choose a chat and like it here:
docs.google.com/spreadsheets/d/1re0ntO6ZpPprYrMpKKuV_7I367Th30iRZWEL6ThXkUgGithub chat bot:
github.com/Nigrimmist/HelloBotDescription of Skype commands:
habrahabr.ru/post/97561Thank you for your attention and ...
Join us! - because force is in communities.
About errors in the text please report to the PM. Thank!
UpdateChat bot is still disabled, will file a few days ago.