// DMs related public void OnSendDirectMessage(DirectMessageEvent ev) { if (string.IsNullOrEmpty(accessToken)) return; if (ev.recipientUserIds.Contains(", ") && priorityDmOutbox.Count < maxQueuedDms) { // place all group DMs to priority outbox as long as there's room lock (priorityDmOutbox) { priorityDmOutbox.Enqueue(ev); } } else if (regularDmOutbox.Count < maxQueuedDms) { // place all the rest regular outbox as long as there's room lock (regularDmOutbox) { regularDmOutbox.Enqueue(ev); } } else { // drop DMs if there's no room in either outbox droppedDmCount++; } }
IEnumerator SendDM(DirectMessageEvent ev) { if (!String.IsNullOrEmpty(ev.recipientUserIds) && !String.IsNullOrEmpty(ev.message)) { string broadcasterId = "broadcaster"; var emojifiedMessage = EmojiHandler.Instance.Emojify(ev.message); string payload = String.Format( unformattedDmPayload, broadcastId, ev.recipientUserIds, emojifiedMessage, broadcasterId, ev.user.username, ev.user.ProfileImageUrl, ev.ColorIdx); yield return HandleAPIRequest<EmptyResponse>( APIHttpHost, dmEndpointPath, payload, AccessToken, (EmptyResponse r) => { deliveredDmCount++; }, (APIResponse r) => { }); processedDmCount++; } lock (dmLock) { dmsInFlight--; } yield return null; }