public void Start()
        {
            try
            {
                Bot = new TelegramBotClient(this.token);

                Bot.OnCallbackQuery      += BotOnCallbackQueryReceived;
                Bot.OnMessage            += BotOnMessageReceived;
                Bot.OnMessageEdited      += BotOnMessageReceived;
                Bot.OnInlineResultChosen += BotOnChosenInlineResultReceived;
                Bot.OnReceiveError       += BotOnReceiveError;

                var me = Bot.GetMeAsync().Result;

                Logger.Log(string.Format("Telegram successfully login with {0}", me.Username));

                EventHub.Register("Chat.Public.SendToTelegram.Group",
                                  new Action <object>((x) => {
                    var y          = (StdChatModel)x;
                    var serverInfo = DataAccess.Instance.QueryServerInfo(y.Source);
                    var serverName = serverInfo == null ? y.Source : serverInfo.Name;
                    Task.Run(async() => {
                        await Bot.SendTextMessageAsync(trustedGroups[0], string.Format("[{0}][{1}]: {2}", serverName, y.DisplayName, y.Text));
                    }).Wait();
                }));

                EventHub.Register("Chat.Public.BroadcastToTelegram.Group",
                                  new Action <object>((x) => {
                    var y          = (StdChatModel)x;
                    var serverInfo = DataAccess.Instance.QueryServerInfo(y.Source);
                    var serverName = serverInfo == null ? y.Source : serverInfo.Name;
                    Task.Run(async() => {
                        await Bot.SendTextMessageAsync(trustedGroups[0], string.Format("[{0}] {1}", serverName, y.Text));
                    }).Wait();
                }));

                EventHub.Register("Chat.Public.SendToTelegram.Admin",
                                  new Action <object>((x) => {
                    var y          = (StdChatModel)x;
                    var serverInfo = DataAccess.Instance.QueryServerInfo(y.Source);
                    var serverName = serverInfo == null ? y.Source : serverInfo.Name;
                    Task.Run(async() => {
                        await Bot.SendTextMessageAsync(trustedGroups[0], string.Format("[{0}][{1}]: {1}", serverName, y.DisplayName, y.Text));
                    }).Wait();
                }));

                Bot.StartReceiving();
            }
            catch (Exception e)
            {
                Logger.LogErr(string.Format("TelegramBot Error: {0}", e.ToString()));
            }
        }
        public static void Register(IEventHub eventHub, DataAccess dataAccess)
        {
            eventHub.Register("Chat.Public.FromTelegram",
                              new Action <object>((x) => {
                var y = (StdChatModel)x;
                dataAccess.SendChatMsgToMcs(y);
            }));

            eventHub.Register("Chat.Public.FromMcs",
                              new Action <object>((x) => {
                var y = (StdChatModel)x;
                dataAccess.SendChatMsgToMcs(y, y.Source);
                eventHub.Emit("Chat.Public.SendToTelegram.Group", new StdChatModel
                {
                    Source      = y.Source,
                    DisplayName = y.DisplayName,
                    Text        = y.Text
                });
            }));
        }