コード例 #1
0
        private IncomeMessage ReadMessage(JsonTextReader reader)
        {
            var    message     = new IncomeMessage();
            string path        = reader.Path;
            bool   startObject = reader.TokenType == JsonToken.StartObject;

            if (!startObject)
            {
                throw new Exception("Cannot read income message");
            }

            while (reader.Read())
            {
                if (reader.Path.ToLower() == $"{path}.update_id" && reader.Read())
                {
                    this.nextUpdateId = Math.Max(this.nextUpdateId, long.Parse(reader.Value.ToString()) + 1);
                }

                if (reader.Path.ToLower() == $"{path}.channel_post" && reader.Read())
                {
                    ParseChannelMessage(reader, message);
                }

                if (reader.Path.ToLower() == $"{path}.message" && reader.Read())
                {
                    ParseUserMessage(reader, message);
                }

                if (reader.Path.ToLower() == path && reader.TokenType == JsonToken.EndObject)
                {
                    break;
                }
            }

            if (message.GroupTitle != null && message.ChatId != null)
            {
                this.chatIDs.groupChatIdsByGroupName[message.GroupTitle] = message.ChatId;
            }
            if (message.UserName != null && message.ChatId != null)
            {
                this.chatIDs.privateChatIdsByUsername[message.UserName] = message.ChatId;
            }
            if (message.ChannelTitle != null && message.ChatId != null)
            {
                this.chatIDs.channelChatIdsByChannelName[message.ChannelTitle] = message.ChatId;
            }
            return(message);
        }
コード例 #2
0
        private void BackGroundPrinting()
        {
            while (true)
            {
                this.tokenSource.Token.ThrowIfCancellationRequested();

                Updates updates     = null;
                var     updatesTask = this.context.Bot.GetUpdates(this.tokenSource.Token);
                try
                {
                    updates = updatesTask.Result;
                }
                catch (AggregateException e)
                {
                    if (updatesTask.IsCanceled)
                    {
                        this.tokenSource.Token.ThrowIfCancellationRequested();
                    }
                    throw;
                }
                if (updates.Exception != null)
                {
                    Console.WriteLine($"Exception occurred while getting new messages. {updates.Exception}");
                    this.tokenSource.Cancel();
                }
                else
                {
                    foreach (var m in updates.IncomeMessages)
                    {
                        if (m.SourceType == IncomeMessageSource.PrivateMessage)
                        {
                            Console.WriteLine($"(PrivateMessage) \"{m.UserName}\" : {m.Text}");
                        }
                        else if (m.SourceType == IncomeMessageSource.GroupMessage)
                        {
                            Console.WriteLine($"(GroupMessage  ) \"{m.GroupTitle}\" \"{m.UserName}\" : {m.Text}");
                        }
                        else if (m.SourceType == IncomeMessageSource.ChannelPost)
                        {
                            Console.WriteLine($"(ChannelPost   ) \"{m.ChannelTitle}\" : {m.Text}");
                        }
                        this.lastMessage = m;
                    }
                }
            }
        }
コード例 #3
0
        private void ParseUserMessage(JsonTextReader reader, IncomeMessage message)
        {
            string path        = reader.Path;
            bool   startObject = reader.TokenType == JsonToken.StartObject;

            if (!startObject)
            {
                throw new Exception("Cannot read income message");
            }

            while (reader.Read())
            {
                if (reader.Path.ToLower() == $"{path}.chat.id" && reader.Read())
                {
                    message.ChatId = reader.Value.ToString();
                }

                if (reader.Path.ToLower() == $"{path}.chat.type" && reader.Read())
                {
                    message.SourceType = reader.Value.ToString() == "private" ? IncomeMessageSource.PrivateMessage :
                                         reader.Value.ToString() == "group" ? IncomeMessageSource.GroupMessage : IncomeMessageSource.Unknown;
                }

                if (reader.Path.ToLower() == $"{path}.chat.title" && reader.Read())
                {
                    message.GroupTitle = reader.Value.ToString();
                }

                if (reader.Path.ToLower() == $"{path}.from.username" && reader.Read())
                {
                    message.UserName = reader.Value.ToString();
                }

                if (reader.Path.ToLower() == $"{path}.text" && reader.Read())
                {
                    message.Text = reader.Value.ToString();
                }

                if (reader.Path.ToLower() == path && reader.TokenType == JsonToken.EndObject)
                {
                    break;
                }
            }
        }