mirror of
https://github.com/Ikatono/TwitchIrcClient.git
synced 2025-10-29 04:56:12 -05:00
Added roomstate message type
This commit is contained in:
96
TwitchIrcClient/IRC/Messages/Roomstate.cs
Normal file
96
TwitchIrcClient/IRC/Messages/Roomstate.cs
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Security.Cryptography.X509Certificates;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using TwitchLogger.IRC;
|
||||||
|
using TwitchLogger.IRC.Messages;
|
||||||
|
|
||||||
|
namespace TwitchIrcClient.IRC.Messages
|
||||||
|
{
|
||||||
|
public class Roomstate : ReceivedMessage
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// A Boolean value that determines whether the chat room allows only messages with emotes.
|
||||||
|
/// </summary>
|
||||||
|
public bool EmoteOnly
|
||||||
|
{ get
|
||||||
|
{
|
||||||
|
var value = TryGetTag("emote-only");
|
||||||
|
if (value == "1")
|
||||||
|
return true;
|
||||||
|
if (value == "0")
|
||||||
|
return false;
|
||||||
|
throw new InvalidDataException($"tag \"emote-only\" does not have a proper value: {value}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// An integer value that determines whether only followers can post messages in the chat room.
|
||||||
|
/// The value indicates how long, in minutes, the user must have followed the broadcaster before
|
||||||
|
/// posting chat messages. If the value is -1, the chat room is not restricted to followers only.
|
||||||
|
/// </summary>
|
||||||
|
public int FollowersOnly
|
||||||
|
{ get
|
||||||
|
{
|
||||||
|
var value = TryGetTag("followers-only");
|
||||||
|
if (!int.TryParse(value, out int result))
|
||||||
|
throw new InvalidDataException();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// A Boolean value that determines whether a user’s messages must be unique.
|
||||||
|
/// Applies only to messages with more than 9 characters.
|
||||||
|
/// </summary>
|
||||||
|
public bool UniqueMode
|
||||||
|
{ get
|
||||||
|
{
|
||||||
|
var value = TryGetTag("r9k");
|
||||||
|
if (value == "1")
|
||||||
|
return true;
|
||||||
|
if (value == "0")
|
||||||
|
return false;
|
||||||
|
throw new InvalidDataException($"tag \"r9k\" does not have a proper value: {value}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// An ID that identifies the chat room (channel).
|
||||||
|
/// </summary>
|
||||||
|
public string RoomId => TryGetTag("room-id");
|
||||||
|
/// <summary>
|
||||||
|
/// An integer value that determines how long, in seconds, users must wait between sending messages.
|
||||||
|
/// </summary>
|
||||||
|
public int Slow
|
||||||
|
{ get
|
||||||
|
{
|
||||||
|
string value = TryGetTag("slow");
|
||||||
|
if (!int.TryParse(value, out int result))
|
||||||
|
throw new InvalidDataException($"tag \"slow\" does not have a proper value: {value}");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// A Boolean value that determines whether only subscribers and moderators can chat in the chat room.
|
||||||
|
/// </summary>
|
||||||
|
public bool SubsOnly
|
||||||
|
{ get
|
||||||
|
{
|
||||||
|
var value = TryGetTag("subs-only");
|
||||||
|
if (value == "1")
|
||||||
|
return true;
|
||||||
|
if (value == "0")
|
||||||
|
return false;
|
||||||
|
throw new InvalidDataException($"tag \"subs-only\" does not have a proper value: {value}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public Roomstate(ReceivedMessage other) : base(other)
|
||||||
|
{
|
||||||
|
Debug.Assert(MessageType == IrcMessageType.ROOMSTATE,
|
||||||
|
$"{nameof(Roomstate)} must have type {IrcMessageType.ROOMSTATE}" +
|
||||||
|
$" but has {MessageType}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user