Added nonce and a few API response adjustments
This commit is contained in:
@@ -73,9 +73,9 @@ namespace Discord.API
|
||||
=> Http.Delete(Endpoints.Invite(id));
|
||||
|
||||
//Chat
|
||||
public static Task<APIResponses.SendMessage> SendMessage(string channelId, string message, string[] mentions)
|
||||
public static Task<APIResponses.SendMessage> SendMessage(string channelId, string message, string[] mentions, string nonce)
|
||||
{
|
||||
var request = new APIRequests.SendMessage { Content = message, Mentions = mentions };
|
||||
var request = new APIRequests.SendMessage { Content = message, Mentions = mentions, Nonce = nonce };
|
||||
return Http.Post<APIResponses.SendMessage>(Endpoints.ChannelMessages(channelId), request);
|
||||
}
|
||||
public static Task<APIResponses.EditMessage> EditMessage(string channelId, string messageId, string message, string[] mentions)
|
||||
|
||||
@@ -62,6 +62,8 @@ namespace Discord.API.Models
|
||||
public string Content;
|
||||
[JsonProperty(PropertyName = "mentions")]
|
||||
public string[] Mentions;
|
||||
[JsonProperty(PropertyName = "nonce")]
|
||||
public string Nonce;
|
||||
}
|
||||
public class EditMessage : SendMessage { }
|
||||
|
||||
|
||||
@@ -60,6 +60,13 @@ namespace Discord.API.Models
|
||||
[JsonProperty(PropertyName = "guild_id")]
|
||||
public string ServerId;
|
||||
}
|
||||
internal class InitialMemberInfo : RoleMemberInfo
|
||||
{
|
||||
[JsonProperty(PropertyName = "mute")]
|
||||
public bool IsMuted;
|
||||
[JsonProperty(PropertyName = "deaf")]
|
||||
public bool IsDeafened;
|
||||
}
|
||||
internal class PresenceMemberInfo : MemberInfo
|
||||
{
|
||||
[JsonProperty(PropertyName = "game_id")]
|
||||
@@ -88,10 +95,6 @@ namespace Discord.API.Models
|
||||
}
|
||||
internal class RoleMemberInfo : MemberInfo
|
||||
{
|
||||
[JsonProperty(PropertyName = "mute")]
|
||||
public bool IsMuted;
|
||||
[JsonProperty(PropertyName = "deaf")]
|
||||
public bool IsDeafened;
|
||||
[JsonProperty(PropertyName = "joined_at")]
|
||||
public DateTime? JoinedAt;
|
||||
[JsonProperty(PropertyName = "roles")]
|
||||
@@ -170,7 +173,7 @@ namespace Discord.API.Models
|
||||
[JsonProperty(PropertyName = "channels")]
|
||||
public ChannelInfo[] Channels;
|
||||
[JsonProperty(PropertyName = "members")]
|
||||
public RoleMemberInfo[] Members;
|
||||
public InitialMemberInfo[] Members;
|
||||
[JsonProperty(PropertyName = "presences")]
|
||||
public PresenceMemberInfo[] Presences;
|
||||
[JsonProperty(PropertyName = "voice_states")]
|
||||
@@ -259,6 +262,8 @@ namespace Discord.API.Models
|
||||
public string Content;
|
||||
[JsonProperty(PropertyName = "author")]
|
||||
public UserReference Author;
|
||||
[JsonProperty(PropertyName = "nonce")]
|
||||
public string Nonce;
|
||||
}
|
||||
|
||||
//Roles
|
||||
|
||||
@@ -21,6 +21,7 @@ namespace Discord
|
||||
private readonly Regex _userRegex, _channelRegex;
|
||||
private readonly MatchEvaluator _userRegexEvaluator, _channelRegexEvaluator;
|
||||
private readonly JsonSerializer _serializer;
|
||||
private readonly Random _rand;
|
||||
|
||||
/// <summary> Returns the User object for the current logged in user. </summary>
|
||||
public User User { get; private set; }
|
||||
@@ -66,6 +67,7 @@ namespace Discord
|
||||
/// <summary> Initializes a new instance of the DiscordClient class. </summary>
|
||||
public DiscordClient()
|
||||
{
|
||||
_rand = new Random();
|
||||
_isStopping = new ManualResetEventSlim(false);
|
||||
|
||||
_serializer = new JsonSerializer();
|
||||
@@ -1004,7 +1006,8 @@ namespace Discord
|
||||
|
||||
if (text.Length <= 2000)
|
||||
{
|
||||
var msg = await DiscordAPI.SendMessage(channelId, text, mentions);
|
||||
var nonce = GenerateNonce();
|
||||
var msg = await DiscordAPI.SendMessage(channelId, text, mentions, nonce);
|
||||
return new Message[] { _messages.Update(msg.Id, channelId, msg) };
|
||||
}
|
||||
else
|
||||
@@ -1014,7 +1017,8 @@ namespace Discord
|
||||
for (int i = 0; i < blockCount; i++)
|
||||
{
|
||||
int index = i * DiscordAPI.MaxMessageSize;
|
||||
var msg = await DiscordAPI.SendMessage(channelId, text.Substring(index, Math.Min(2000, text.Length - index)), mentions);
|
||||
var nonce = GenerateNonce();
|
||||
var msg = await DiscordAPI.SendMessage(channelId, text.Substring(index, Math.Min(2000, text.Length - index)), mentions, nonce);
|
||||
result[i] = _messages.Update(msg.Id, channelId, msg);
|
||||
await Task.Delay(1000);
|
||||
}
|
||||
@@ -1185,6 +1189,11 @@ namespace Discord
|
||||
text = _channelRegex.Replace(text, _channelRegexEvaluator);
|
||||
return text;
|
||||
}
|
||||
private string GenerateNonce()
|
||||
{
|
||||
lock (_rand)
|
||||
return _rand.Next(0, int.MaxValue).ToString();
|
||||
}
|
||||
|
||||
/// <summary> Blocking call that will not return until client has been stopped. This is mainly intended for use in console applications. </summary>
|
||||
public void Block()
|
||||
|
||||
@@ -85,12 +85,16 @@ namespace Discord
|
||||
if (model is API.Models.RoleMemberInfo)
|
||||
{
|
||||
var extendedModel = model as API.Models.RoleMemberInfo;
|
||||
member.IsDeafened = extendedModel.IsDeafened;
|
||||
member.IsMuted = extendedModel.IsMuted;
|
||||
member.RoleIds = extendedModel.Roles;
|
||||
if (extendedModel.JoinedAt.HasValue)
|
||||
member.JoinedAt = extendedModel.JoinedAt.Value;
|
||||
}
|
||||
if (model is API.Models.InitialMemberInfo)
|
||||
{
|
||||
var extendedModel = model as API.Models.InitialMemberInfo;
|
||||
member.IsDeafened = extendedModel.IsDeafened;
|
||||
member.IsMuted = extendedModel.IsMuted;
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user