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); }
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; } } } }
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; } } }