static void Main() { PrintStatus("Loading config..", ConsoleColor.Green); try { Config = JsonConvert.DeserializeObject <Config>(File.ReadAllText(Path.Combine(Environment.CurrentDirectory, "config.json"))); } catch (JsonReaderException e) { SetError(e.Message); } catch (FileNotFoundException ex) { SetError(ex.Message); } if (string.IsNullOrWhiteSpace(Config.DisplayName)) { SetError("No display name specified!"); } if (string.IsNullOrWhiteSpace(Config.AuthToken)) { SetError("No authentication token provided!"); } PrintStatus("Setting up account..", ConsoleColor.Green); Account = new DliveAccount(Config.AuthToken); try { Account.Query.GetMyInfo(); } catch (JsonSerializationException) { SetError("Invalid authentication token provided!"); } catch (Exception e) { SetError(e.Message); } PublicUserData usr = PublicQuery.GetPublicInfoByDisplayName(Config.DisplayName); if (usr.Username == "invalid user") { SetError("Invalid display name provided!"); } PrintStatus("Connecting to event stream..", ConsoleColor.Green); Subscription subscription = Subscription.SubscriptionByDisplayName(Config.DisplayName); subscription.OnChatEvent += OnChat; subscription.OnConnected += () => PrintStatus($"Connected to {Config.DisplayName}!", ConsoleColor.Green); subscription.OnError += (err) => SetError(err); subscription.Connect(); Console.WriteLine("Press enter to stop the program"); Console.ReadLine(); }
private void BuildChatMessage(string channel, dynamic data) { Enum.TryParse(data[0].type.ToString().ToUpper(), out ChatEventType type); Enum.TryParse(data[0].roomRole.ToString().ToUpper(), out RoomRole roomRole); #if DEBUG Console.WriteLine(data[0].ToString()); #endif switch (type) { case ChatEventType.MESSAGE: OnChatEvent?.Invoke(new ChatTextMessage(channel, data[0].id.ToString(), Util.DliveUserObjectToPublicUserData(data[0].sender), roomRole, bool.Parse(data[0].subscribing.ToString()), data[0].content.ToString(), long.Parse(data[0].subLength.ToString()))); break; case ChatEventType.GIFT: Enum.TryParse(data[0].gift.ToString(), out GiftType giftType); OnChatEvent?.Invoke(new ChatGiftMessage(channel, data[0].id.ToString(), Util.DliveUserObjectToPublicUserData(data[0].sender), roomRole, bool.Parse(data[0].subscribing.ToString()), giftType, int.Parse(data[0].amount.ToString()), data[0].message.ToString())); break; case ChatEventType.SUBSCRIPTION: OnChatEvent?.Invoke(new ChatSubscriptionMessage(channel, data[0].id.ToString(), Util.DliveUserObjectToPublicUserData(data[0].sender), roomRole, bool.Parse(data[0].subscribing.ToString()), int.Parse(data[0].month.ToString()))); break; case ChatEventType.HOST: OnChatEvent?.Invoke(new ChatHostMessage(channel, data[0].id.ToString(), Util.DliveUserObjectToPublicUserData(data[0].sender), roomRole, bool.Parse(data[0].subscribing.ToString()), int.Parse(data[0].viewer.ToString()))); break; case ChatEventType.CHAT_MODE: Enum.TryParse(data[0].mode.ToString(), out ChatMode mode); OnChatEvent?.Invoke(new ChatModeChangeMessage(channel, data[0].id.ToString(), Util.DliveUserObjectToPublicUserData(data[0].sender), roomRole, bool.Parse(data[0].subscribing.ToString()), mode)); break; case ChatEventType.BAN: Enum.TryParse(data[0].bannedByRoomRoleToString().ToUpper(), out RoomRole bannedByRoomRole); OnChatEvent?.Invoke(new ChatBanMessage(channel, data[0].id.ToString(), Util.DliveUserObjectToPublicUserData(data[0].sender), roomRole, Util.DliveUserObjectToPublicUserData(data[0].bannedBy), bannedByRoomRole)); break; case ChatEventType.MOD: ModeratorStatusChange change = bool.Parse(data[0].add.ToString()) ? ModeratorStatusChange.PROMOTED : ModeratorStatusChange.DEMOTED; OnChatEvent?.Invoke(new ChatModStatusChangeMessage(channel, data[0].id.ToString(), Util.DliveUserObjectToPublicUserData(data[0].sender), roomRole, bool.Parse(data[0].subscribing.ToString()), change)); break; case ChatEventType.EMOTE: OnChatEvent?.Invoke(new ChatEmoteMessage(channel, data[0].id.ToString(), Util.DliveUserObjectToPublicUserData(data[0].sender), roomRole, bool.Parse(data[0].subscribing.ToString()), data[0].emote.ToString())); break; case ChatEventType.TIMEOUT: Enum.TryParse(data[0].bannedByRoomRoleToString().ToUpper(), out RoomRole timedoutByRoomRole); OnChatEvent?.Invoke(new ChatTimeoutMessage(channel, data[0].id.ToString(), int.Parse(data[0].minute.ToString()), Util.DliveUserObjectToPublicUserData(data[0].sender), roomRole, Util.DliveUserObjectToPublicUserData(data[0].bannedBy), timedoutByRoomRole)); break; case ChatEventType.CLIP: OnChatEvent?.Invoke(new ChatClipMessage(channel, data[0].id.ToString(), Util.DliveUserObjectToPublicUserData(data[0].sender), roomRole, bool.Parse(data[0].subscribing.ToString()), new Uri($"https://dlive.tv/clip/{data[0].url.ToString()}"))); break; case ChatEventType.GIFTSUB: if (!int.TryParse(data[0].count.ToString(), out int months)) { months = 1; } OnChatEvent?.Invoke(new ChatGiftSubscriptionMessage(channel, data[0].id.ToString(), months, Util.DliveUserObjectToPublicUserData(data[0].sender), PublicQuery.GetPublicInfoByDisplayName(data[0].receiver.ToString()), roomRole)); break; default: dynamic user = data[0].sender; OnChatEvent?.Invoke(user != null ? new UserChatMessage(type, channel, data[0].id.ToString(), Util.DliveUserObjectToPublicUserData(user), roomRole, bool.Parse(data[0].subscribing.ToString())) : new ChatMessage(type, channel, data[0].id.ToString())); break; } }
public static string DliveDisplayNameToUsername(string displayName) { return(PublicQuery.GetPublicInfoByDisplayName(displayName).Username); }