Skip to content

Commit

Permalink
Fix some issue, new Update Types
Browse files Browse the repository at this point in the history
  • Loading branch information
TheLanc3 committed Oct 14, 2023
1 parent 92756c6 commit 420918e
Show file tree
Hide file tree
Showing 15 changed files with 186 additions and 24 deletions.
4 changes: 2 additions & 2 deletions src/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.

[assembly: AssemblyVersion("1.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyVersion("1.0.5")]
[assembly: AssemblyFileVersion("1.0.5.1")]

// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.
Expand Down
83 changes: 67 additions & 16 deletions src/TamTamClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,7 @@
using TamTam.Bot.Types.Enums;
using TamTam.Bot.Types.Updates;

namespace TamTam.Bot
{
namespace TamTam.Bot {
public class TamTamClient {
private static readonly string header = "application/json";
private static readonly string api_url = "https://botapi.tamtam.chat";
Expand Down Expand Up @@ -50,13 +49,13 @@ public async void StartPolling(Func<Update, Task> updateHandler, UpdateType[] al
Marker = Math.Max(Marker.Value, updates.Marker);
foreach (var update in updates.Updates) {
if(allowedUpdates == null) {
var upd = ParseRawUpdate(update);
var upd = ParseRawUpdate(update, updates.JsonRaw);
await updateHandler.Invoke(upd);
}
else {
foreach(var allwUpdate in allowedUpdates) {
if(allwUpdate == update.UpdateType) {
var upd = ParseRawUpdate(update);
var upd = ParseRawUpdate(update, updates.JsonRaw);
await updateHandler.Invoke(upd);
}
}
Expand All @@ -66,43 +65,93 @@ public async void StartPolling(Func<Update, Task> updateHandler, UpdateType[] al
}
}

private Update ParseRawUpdate(UpdateRaw raw) {
private Update ParseRawUpdate(UpdateRaw raw, string jsonRaw) {
var update = new Update() { UpdateType = raw.UpdateType };
switch (raw.UpdateType)
{
case UpdateType.BotAdded:
update.BotAdded = new BotAdded() { TimeStamp = raw.TimeStamp, ChatId = raw.ChatId.Value, User = raw.User, IsChannel = raw.IsChannel.Value };
update.BotAdded = new BotAdded()
{
TimeStamp = raw.TimeStamp, ChatId = raw.ChatId.Value,
User = raw.User, IsChannel = raw.IsChannel.Value
};
break;
case UpdateType.UserAdded:
update.UserAdded = new UserAdded() { TimeStamp = raw.TimeStamp, ChatId = raw.ChatId.Value, User = raw.User, InviterId = raw.InviterId.Value, IsChannel = raw.IsChannel.Value };
update.UserAdded = new UserAdded() {
TimeStamp = raw.TimeStamp, ChatId = raw.ChatId.Value,
User = raw.User, InviterId = raw.InviterId.Value, IsChannel = raw.IsChannel.Value };
break;
case UpdateType.BotRemoved:
update.BotRemoved = new BotRemoved() { TimeStamp = raw.TimeStamp, ChatId = raw.ChatId.Value, User = raw.User, IsChannel = raw.IsChannel.Value };
update.BotRemoved = new BotRemoved() {
TimeStamp = raw.TimeStamp, ChatId = raw.ChatId.Value,
User = raw.User, IsChannel = raw.IsChannel.Value };
break;
case UpdateType.MessageCallback:
update.MessageCallback = new MessageCallback() { TimeStamp = raw.TimeStamp, Callback = raw.Callback, Message = raw.Message, UserLocale = raw.UserLocale };
update.MessageCallback = new MessageCallback()
{
TimeStamp = raw.TimeStamp, Callback = raw.Callback,
Message = raw.Message, UserLocale = raw.UserLocale
};
break;
case UpdateType.MessageCreated:
update.MessageCreated = new MessageCreated() { TimeStamp = raw.TimeStamp, Message = raw.Message, UserLocale = raw.UserLocale };
update.MessageCreated = new MessageCreated() {
TimeStamp = raw.TimeStamp, Message = raw.Message,
UserLocale = raw.UserLocale };
break;
case UpdateType.MessageRemoved:
update.MessageRemoved = new MessageRemoved() { TimeStamp = raw.TimeStamp, MessageId = raw.MessageId, ChatId = raw.ChatId.Value, UserId = raw.UserId.Value};
update.MessageRemoved = new MessageRemoved()
{
TimeStamp = raw.TimeStamp, MessageId = raw.MessageId, ChatId = raw.ChatId.Value,
UserId = raw.UserId.Value
};
break;
case UpdateType.MessageEdited:
update.MessageEdited = new MessageEdited() { TimeStamp = raw.TimeStamp, Message = raw.Message };
update.MessageEdited = new MessageEdited()
{
TimeStamp = raw.TimeStamp, Message = raw.Message
};
break;
case UpdateType.UserRemoved:
update.UserRemoved = new UserRemoved() { TimeStamp = raw.TimeStamp, ChatId = raw.ChatId.Value, User = raw.User, AdminId = raw.AdminId.Value, IsChannel = raw.IsChannel.Value };
update.UserRemoved = new UserRemoved() {
TimeStamp = raw.TimeStamp,
ChatId = raw.ChatId.Value, User = raw.User, AdminId = raw.AdminId.Value,
IsChannel = raw.IsChannel.Value };
break;
case UpdateType.BotStarted:
update.BotStarted = new BotStarted() { TimeStamp = raw.TimeStamp, ChatId = raw.ChatId.Value, User = raw.User, Payload = raw.Payload, UserLocale = raw.UserLocale };
update.BotStarted = new BotStarted()
{
TimeStamp = raw.TimeStamp, ChatId = raw.ChatId.Value, User = raw.User,
Payload = raw.Payload, UserLocale = raw.UserLocale
};
break;
case UpdateType.ChatTitleChanged:
update.ChatTitleChanged = new ChatTitleChanged() { TimeStamp = raw.TimeStamp, ChatId = raw.ChatId.Value, };
update.ChatTitleChanged = new ChatTitleChanged()
{
TimeStamp = raw.TimeStamp, ChatId = raw.ChatId.Value,
};
break;
case UpdateType.MessageConstructionRequest:
update.MessageConstructionRequest = new MessageConstructionRequest()
{
TimeStamp = raw.TimeStamp, User = raw.User, UserLocale = raw.UserLocale,
SessionId = raw.SessionId, Data = raw.Data, Input = raw.Input
};
break;
case UpdateType.MessageConstructed:
update.MessageConstructed = new MessageConstructed()
{
TimeStamp = raw.TimeStamp, Message = raw.Message, SessionId = raw.SessionId
};
break;
case UpdateType.MessageChatCreated:
update.MessageChatCreated = new MessageChatCreated()
{
TimeStamp = raw.TimeStamp, Chat = raw.Chat, MessageId = raw.MessageId,
StartPayload = raw.StartPayload
};
break;
}
update.JsonRaw = jsonRaw;
return update;
}
private async Task<string> MakeRequest(string method, string urlMethod, Dictionary<string, dynamic> args = null, Dictionary<string, string> additionalParams = null) {
Expand Down Expand Up @@ -171,7 +220,9 @@ public async Task<ReceivedUpdates> GetUpdates(long? marker = null) {
using(HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse()) {
using Stream stream = httpWebResponse.GetResponseStream();
using StreamReader streamReader = new StreamReader(stream);
return JsonConvert.DeserializeObject<ReceivedUpdates>(await streamReader.ReadToEndAsync());
var obj = JsonConvert.DeserializeObject<ReceivedUpdates>(await streamReader.ReadToEndAsync());
obj.JsonRaw = await streamReader.ReadToEndAsync();
return obj;
}
}
catch(Exception exc) {
Expand Down
3 changes: 2 additions & 1 deletion src/Types/Chat.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,9 @@ public class Chat {
public string? Title;
public Icon? Icon;

[JsonConverter(typeof(UnixDateTimeConverter))]
[JsonConverter(typeof(MillisecondEpochConverter))]
public DateTime LastEventTime;

public int ParticipantsCount;
public long? OwnerId;
public ChatParticipant[] Participants;
Expand Down
13 changes: 13 additions & 0 deletions src/Types/Enums/ActionType.cs
Original file line number Diff line number Diff line change
@@ -1,10 +1,23 @@
using System.Runtime.Serialization;

namespace TamTam.Bot.Types.Enums {
public enum ActionType {
[EnumMember(Value = "typing_on")]
TypingOn,

[EnumMember(Value = "sending_photo")]
SendingPhoto,

[EnumMember(Value = "sending_video")]
SendingVideo,

[EnumMember(Value = "sending_audio")]
SendingAudio,

[EnumMember(Value = "sending_file")]
SendingFile,

[EnumMember(Value = "mark_seen")]
MarkSeen
}
}
15 changes: 12 additions & 3 deletions src/Types/Enums/AttachmentType.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,13 @@
namespace TamTam.Bot.Types.Enums
{
public enum AttachmentType { Image, Video, Audio, File, Contact, Sticker, Share, Location, InlineKeyboard }
namespace TamTam.Bot.Types.Enums {
public enum AttachmentType {
Image,
Video,
Audio,
File,
Contact,
Sticker,
Share,
Location,
InlineKeyboard
}
}
7 changes: 7 additions & 0 deletions src/Types/Enums/InlineButtonType.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,16 @@
using System.Runtime.Serialization;

namespace TamTam.Bot.Types.Enums {
public enum InlineButtonType {
Callback,
Link,

[EnumMember(Value = "request_contact")]
RequestContact,

[EnumMember(Value = "request_geo_location")]
RequestGeoLocation,

Chat
}
}
6 changes: 6 additions & 0 deletions src/Types/Enums/InputType.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
namespace TamTam.Bot.Types.Enums {
public enum InputType {
Callback,
Message
}
}
11 changes: 11 additions & 0 deletions src/Types/Enums/Permissions.cs
Original file line number Diff line number Diff line change
@@ -1,13 +1,24 @@
using System;
using System.Runtime.Serialization;

namespace TamTam.Bot.Types.Enums {
[Flags]
public enum Permissions {
[EnumMember(Value = "read_all_messages")]
ReadAllMessages,

[EnumMember(Value = "add_remove_members")]
AddRemoveMembers,

[EnumMember(Value = "add_admins")]
AddAdmins,

[EnumMember(Value = "change_chat_info")]
ChangeChatInfo,

[EnumMember(Value = "pin_message")]
PinMessage,

Write
}
}
9 changes: 9 additions & 0 deletions src/Types/Input.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
using TamTam.Bot.Types.Enums;

namespace TamTam.Bot.Types {
public class Input {
public InputType InputType;
public Message[]? Messages;
public Payload? Payload;
}
}
6 changes: 5 additions & 1 deletion src/Types/Raws/UpdateRaw.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,11 @@ public class UpdateRaw {
public string? UserLocale { get; set; }
public bool? IsChannel { get; set; }
public long? InviterId { get; set; }

public string? SessionId { get; set; }
public string? Data { get; set; }
public Input? Input { get; set; }
public Chat? Chat { get; set; }
public string? StartPayload { get; set; }
public Payload? Payload { get; set; }
public long? AdminId { get; set; }
public string? Title { get; set; }
Expand Down
1 change: 1 addition & 0 deletions src/Types/ReceivedUpdates.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@ namespace TamTam.Bot.Types {
public class ReceivedUpdates {
public UpdateRaw[] Updates;
public long Marker;
public string JsonRaw;
}
}
12 changes: 11 additions & 1 deletion src/Types/Update.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
namespace TamTam.Bot.Types {
public class Update {
public UpdateType UpdateType;

public string JsonRaw;

#nullable enable
public BotAdded? BotAdded;

Expand Down Expand Up @@ -35,5 +36,14 @@ public class Update {

#nullable enable
public UserRemoved? UserRemoved;

#nullable enable
public MessageConstructionRequest? MessageConstructionRequest;

#nullable enable
public MessageConstructed? MessageConstructed;

#nullable enable
public MessageChatCreated? MessageChatCreated;
}
}
13 changes: 13 additions & 0 deletions src/Types/Updates/MessageChatCreated.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using System;
using Newtonsoft.Json;

namespace TamTam.Bot.Types.Updates {
public class MessageChatCreated {
[JsonConverter(typeof(MillisecondEpochConverter))]
public DateTime TimeStamp { get; set; }

public Chat Chat { get; set; }
public string MessageId { get; set; }
public string? StartPayload { get; set; }
}
}
12 changes: 12 additions & 0 deletions src/Types/Updates/MessageConstructed.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using System;
using Newtonsoft.Json;

namespace TamTam.Bot.Types.Updates {
public class MessageConstructed {
[JsonConverter(typeof(MillisecondEpochConverter))]
public DateTime TimeStamp;

public string SessionId;
public Message Message;
}
}
15 changes: 15 additions & 0 deletions src/Types/Updates/MessageConstructionRequest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using System;
using Newtonsoft.Json;

namespace TamTam.Bot.Types.Updates {
public class MessageConstructionRequest {
[JsonConverter(typeof(MillisecondEpochConverter))]
public DateTime TimeStamp { get; set; }

public User User { get; set; }
public string? UserLocale { get; set; }
public string SessionId { get; set; }
public string? Data { get; set; }
public Input Input { get; set; }
}
}

0 comments on commit 420918e

Please sign in to comment.