مرجع أحداث البث المباشر

توثّق هذه الصفحة بيانات الأحداث القياسية التي يصدرها Social Stream Ninja للمنصات الرئيسية. استخدمها مرجعاً مشتركاً عند توصيل مصادر جديدة أو استكشاف التكاملات أو توحيد تسميات الواجهة. لمصفوفة أقصر تركز على المستهلكين، راجع توافق الأحداث والتنبيهات.

مهم: يعتمد توفر الأحداث على المصدر والصلاحيات وإعدادات الالتقاط. لإخفاء الصفوف الموسومة كأحداث في لوحة الإرساء أو تراكبات الرسائل المميزة، أضف &hideevents أو &hideallevents. لإخفاء أحداث محددة، استخدم &filterevents=subscription_gift,new_follower,gifted. يمكن لهذه المرشحات أيضاً إخفاء الصفوف المدفوعة التي تحمل event؛ لا تطابق مرشحات الأحداث صفوف التبرعات العادية التي لا تحمل علامة حدث. تظل مرشحات الرسائل الأخرى سارية.
اختر طريقة الالتقاط: بالنسبة إلى YouTube وTwitch وKick، وضع WebSocket يوفر عموماً تغطية أوسع للأحداث. يقرأ التقاط DOM القياسي الصفوف والبطاقات المعروضة فعلياً على الصفحة. لهدايا YouTube Super Chats وSuper Stickers وJewel مسارات التقاط في الوضعين؛ وتختلف أحداث الهدايا والتبرعات والعضوية الأخرى حسب المصدر. راجع جداول المنصات للمسارات المدعومة والإعدادات المطلوبة.
هل تبني عمليات أتمتة؟ اطّلع على دليل Event Flow لتعلّم استخدام بيانات الأحداث هذه في المشغّلات والتنبيهات ومسارات العمل المخصصة. يتضمن الدليل مرجع متغيرات القوالب لتنسيق النص.
بنية البيانات: ينبغي أن تستخدم صفوف الدردشة الشبيهة بالتبرعات hasDonation والحقل الاختياري donoValue. لا تضبط event: "donation" لمجرد أن صف دردشة أو تبرع عادياً يحمل قيمة؛ استخدم أسماء أحداث محددة فقط لإجراءات المنصة الحقيقية أو أنواع العناصر المدفوعة، مثل superchat, supersticker, gift، أو jeweldonation. استخدم meta فقط للبيانات المنظمة الإضافية التي يحتاجها المستهلكون فعلياً ولا تغطيها الحقول الموجودة بالفعل.

توفر الميزات باختصار

استخدم هذا الجدول لمعرفة أنواع التنبيه التي تقدمها كل طريقة التقاط حالياً. تلي ذلك ملاحظات البيانات المفصلة.

يجمع صندوق تنبيهات البث المتعدد المخصص الأحداث المباشرة في ست فئات تنبيه أساسية: Follow, Subscription/Member, Donation, Bits/Cheers, Raid/Host، و Purchase، إضافةً إلى فئتين اختياريتين (Auction و Hype Train) المفعّلة عبر معاملات URL. يستمد هذه الفئات من الحقول الموجودة event, membership, subtitle, hasDonation، و meta كحقول موثقة هنا؛ لا يلزم تنسيق بيانات منفصل.

المصدر مشتركون / أعضاء جدد متابعون جدد التبرعات الأعداد والإضافات
YouTube (جسر Data API) انضمامات العضوية وتجديداتها وهداياها تنبيهات المشتركين الفردية* والإجماليات Super Chats وSuper Stickers إجماليات المشاهدين والمشتركين والمشاهدات (بالاستطلاع الدوري)
Twitch — التقاط DOM سطور حزم الهدايا وإشعارات المستلِمين - Bits موسومة عبر hasDonation عدد المشاهدين وبطاقات المكافآت وبطاقات إبراز المجتمع
Twitch — EventSub/WebSocket اشتراكات وإعادات اشتراك وهدايا فورية متابعات فورية وإجمالي المتابعين Cheers وPower-ups واستبدال نقاط القناة إجماليات المشاهدين والمشتركين والمتابعين وحالة البث وإشعارات الإعلانات
TikTok Live - بطاقات المتابعة (عندما يعرضها TikTok) هدايا محوّلة إلى إجماليات عملات عدد المشاهدين وتنبيهات الانضمام وعواصف الإعجاب
YouNow - نشاط المعجبين والجمهور - عدد المشاهدين من لوحة الجمهور المباشر
Favorited Studio - - - عدد المشاهدين من علامة تبويب المشاهدين المباشرين
Whatnot - - - عدد المشاهدين وتنبيهات الانضمام وبيانات المزاد المباشر الوصفية والمنتجات ولقطات السحوبات
eBay Live - - - عدد المشاهدين وعدد المتابعين ولقطات بطاقات الأحداث المباشرة وبيانات تذييل المزاد الوصفية (عند توفرها) وقلوب التفاعل وبيانات الأحداث القادمة
صندوق تنبيهات Streamlabs الاشتراكات والهدايا والرعاة والمتابعات Cheer/bits، والتبرعات (مع العملة) Cheer/bits، والتبرعات (hasDonation) أثناء فتح صندوق التنبيهات؛ متاح أيضاً عبر sources/websocket/streamlabs.html رمز المقبس
إجراءات OBS في Flow Actions - - - أحداث المخرجات والمشاهد وذاكرة إعادة العرض وانتهاء الوسائط في OBS لـ Event Flow عندما actions.html متصل بـ OBS WebSocket
Kick — DOM - - - عدد المشاهدين وإشعارات النظام الأساسية للمكافآت والهدايا؛ استخدم جسر Kick لتنبيهات أكثر تفصيلاً
Kick — WebSocket/الجسر اشتراكات جديدة وتجديدات وهدايا تنبيهات المتابعة وإجمالي المتابعين أحداث الدعم / التبرع (المبلغ والعملة) حالة البث واستبدال المكافآت وبيانات الملف الشخصي الوصفية
Facebook Live - - النجوم عند ظهورها في DOM صفوف الدردشة والنجوم واستطلاع عدد المشاهدين
Rumble — التقاط DOM - - أسعار Rant الظاهرة الدردشة والغارات الواردة واستطلاع عدد المشاهدين
Rumble — WebSocket / رابط API اشتراكات جديدة واشتراكات مُهداة تنبيهات المتابعة وإجمالي المتابعين Rants / تبرعات (المبلغ والعملة) إجماليات المشاهدين والمشتركين وحالة البث المباشر وخلاصة الدردشة
Streamplace - - - عدد المشاهدين وأسماء الدردشة وألوانها وشاراتها وردودها وروابطها
WorldsWave - - تسميات التبرعات عند وجودها الدردشة المباشرة المعروضة وتحديثات عدد المشاهدين الاختيارية
CHZZK - - صفوف تبرعات cheese الظاهرة صفوف الدردشة وصور الشارات والتعبيرات واستطلاع عدد المشاهدين
BEAM - - - صفوف الدردشة واستطلاع عدد المشاهدين عندما تعرض صفحة الدردشة فقط عداد مشاهدين
Seal Team Sloth - - - صفوف الدردشة المنبثقة المعروضة إضافةً إلى viewer_update يستطلع عند تفعيل أعداد المشاهدين
Castyr - - - صفوف الدردشة المنبثقة المعروضة وتحديثات عدد المشاهدين الاختيارية
RPLAY - - - مع تسجيل الدخول /live/chat/box/ كنافذة منبثقة: type: "rplay" الدردشة والصور الرمزية وصور شارات الفئات والتعبيرات. تحتفظ تبرعات العملات بمبلغها ووحدتها في hasDonation للتحويل المشترك إلى الدولار الأمريكي، دون حدث تبرع. الخيار الاختياري viewer_update تستخدم عمليات الاستطلاع عدداً صحيحاً في meta من نقطة نهاية البث العامة في RPLAY. تُستبعد صفوف Twitch الممررة.
FLEX TV - - - صفوف دردشة معروضة مع الأسماء وألوان المؤلفين وصور الشارات وبيانات الأعضاء الوصفية

*يُستعلم عن تنبيهات المشتركين في YouTube دورياً وقد تتأخر أو تكون غير مكتملة. لا يَعِد مرجع API بفترة تسليم ثابتة من أربع ساعات. راجع حدود API الرسمية للاشتراكات.

نظرة عامة على الحقول

data يعني هنا كائن الرسالة، وليس غلافاً إضافياً ينبغي إضافته. لصفوف الدردشة والأحداث ذات البيانات الوصفية فقط بنيتان مختلفتان: قد تحذف العدادات ولقطات الحالة chatname/chatmessage. في جداول المنصات، كرسالة يصف صف دردشة عادياً، وليس قيمة حرفية من نوع event: "message".

الحقل البنية الاستخدام
data.type سلسلة نصية معرّف المصدر المستخدم في التراكبات والمرشحات وEvent Flow. يحتفظ Instagram بالدردشة المباشرة كـ instagramlive والتعليقات غير المباشرة كـ instagram. راجع دليل أنواع المصادر للصيغ المختلفة والمصادر العامة والتوجيه الصادر.
data.chatname سلسلة نصية اسم العرض الذي يوفره المصدر وتستخدمه معالجة الرسائل والمخرجات غير التابعة للتراكبات. لا يجوز لاسم عرض مستخدم بديل مضبوط أن يحل محل هذه القيمة إلا في النسخ المرسلة إلى لوحة الإرساء والتراكب.
data.username سلسلة نصية اسم المستخدم في المصدر عند توفره. قد تضيف بيانات لوحة إرساء أو تراكب تستخدم اسماً بديلاً هذا الحقل للاحتفاظ بالقيمة الأصلية لـ chatname لإجراءات المستخدم؛ تبقى الرسالة القياسية دون تغيير.
data.userid سلسلة نصية معرّف مستخدم خاص بالمنصة. تفضّل إجراءات المستخدم هذه القيمة على username و chatname.
data.platformسلسلة نصية (اختياري)تتضمن بعض التكاملات هذا إلى جانب type. تحذفه كثير من محوّلات المصادر؛ استخدم type لتوجيه المصدر.
data.idسلسلة نصية | رقم (اختياري)معرّف الرسالة أو الحدث. يعتمد معناه على المصدر ووسيلة النقل؛ لا تفترض أنه دائماً معرّف إشراف أصلياً للمنصة. استخدم meta.messageId عندما يتيحه المحوّل لمزامنة الحذف.
data.donoValueرقم (اختياري)قيمة رقمية مكافئة بالدولار الأمريكي يوفرها المصدر، بما في ذلك التقديرات. تتجاوز القيمة الصالحة (بما فيها صفر) تحويل currency.js. عند غيابها، يقدّر المستهلكون الدولار الأمريكي من hasDonation وسياق المصدر. تبقى المبالغ والوحدات الأصلية في hasDonation وبيانات المزوّد الوصفية الحالية.
data.chatbadgesمصفوفة | سلسلة نصية (اختياري)روابط صور الشارات أو كائنات الشارات (type: "img" مع src, type: "svg" مع html، أو type: "text" مع text). يحتفظ التمرير بالتسمية الحرفية للشارة النصية في الحقل الاختياري rawText وينتج نصاً مهرب المحارف في text للتراكبات الأقدم. في عمليات التمرير اللاحقة، أعد توليد text من rawText؛ لا تقم بتهريب محارف text مجدداً. تعرض أدوات العرض الحالية rawText حرفياً عند وجوده، واحتفظ بمعالجة النص المرمّز القديمة فيما عدا ذلك. هذا حقل تمثيل، وليس إذناً لعرض HTML. يمكن للمصادر الأقدم إرسال سلسلة HTML واحدة بدلاً من مصفوفة. تقبل تراكبات عرض الشارات التنسيقين وتنقّي HTML الشارات وروابطها محلياً، بما في ذلك عندما يكون المرسل إضافة قديمة. يجب ألا تمنع الشارات غير الصالحة عرض رسالة الدردشة أو العضوية.
data.event سلسلة نصية | قيمة منطقية معرّف لنشاط النظام (مثل viewer_update, subscription_gift, giftpurchase). ينبغي أن تترك الدردشة العادية هذا فارغاً أو false كي تستطيع التراكبات التمييز بين إشعارات النظام والنص الحواري.
data.chatmessage سلسلة نصية نص الرسالة. قد يتضمن HTML منقّى وقابلاً للعرض فقط عندما data.textonly هو false.
data.textonly قيمة منطقية ينطبق فقط على data.chatmessage. true يعني عرض chatmessage كنص عادي، مع الحفاظ على الوسوم الحرفية والنص الشبيه بكيانات HTML؛ لا تفك ترميزه، أو تنقّه كـ HTML، أو تضف وسوم تنسيق إلى هذا النص. طبّق تنسيق الحدث على العنصر المعروض. false يعني chatmessage قد يتضمن HTML منقّى وقابلاً للعرض؛ وتحتفظ الرسائل الأقدم التي لا تحمل العلامة بسلوك HTML هذا. الحقول العادية الأخرى نصوص عادية، باستثناء حقول الوسائط مثل chatimg و contentimg. اعرض الحقول العادية باستخدام textContent، أو قم بتهريب محارفها مرة واحدة عند إنشاء قالب HTML؛ ولا تجرّد محتواها أو تفك ترميزه مراراً.
data.contentimg سلسلة نصية (اختياري) صورة محتوى أو رابط وسائط مدعوم. في الإضافة وتطبيق سطح المكتب، الخيار الاختياري allowExternalGifs يملأ الإعداد حقلاً فارغاً من أول رابط GIF مباشر عبر HTTP(S) في نص الرسالة أو رابط HTML. يجب أن ينتهي مسار URL بـ .gif (دون اعتبار لحالة الأحرف)؛ تُحفظ معاملات الاستعلام والأجزاء. لا يتطلب مفتاح API، ويحافظ على chatmessage والمرفقات الموجودة، ويحترم removeContentImage. الحقل الاختياري hideExternalGifUrl يضيف الإعداد meta.hideExternalGifUrl: true؛ ثم تخفي لوحة الإرساء وتراكب الرسائل المميزة رابط GIF المطابق فقط بعد تحميل صورته، مع الاحتفاظ بالنص المحيط والبيانات الأصلية. تطوي الصور الفاشلة أو التي انتهت مهلتها حاوية المرفق وتترك الرابط ظاهراً. يحاول تراكب GIF فقط عرض الصورة مباشرةً إذا فشل جلب بايتاتها، ويستخدم مدة العرض المضبوطة عند عدم توفر توقيت الحركة؛ وتنتقل قائمة انتظاره إلى التالي عند فشل التحميل أو توقفه. لا يضيف event أو غيّر حقل المصدر type. لا تخضع الصور الخارجية لتصفية المحتوى وقد يفشل تحميلها إذا منع المضيف التضمين.
data.membership سلسلة نصية حالة عضوية مقروءة مثل MEMBERSHIP, new_sponsor, gift_recipient. تستخدمه الواجهات للشارات والمرشحات والإعلانات.
data.subtitle سلسلة نصية وصف تكميلي (مدة العضوية، أو ترقيات الفئات، أو من أهدى...). أبقِه قصيراً ونصياً فقط كي تستطيع التراكبات وضعه تحت اسم العرض.
data.hasDonation سلسلة نصية مبلغ هدية نقدية أو افتراضية ($5.00, 500 bits, 300 coins). املأه حتى عندما data.event فارغ كي تتمكن تراكبات التبرعات من اكتشافه.
data.meta رقم | كائن | سلسلة نصية (قديم) استخدم أعداداً صحيحة عادية للعدادات الفردية (المشاهدون والمتابعون والمشتركون)، وكائنات للسياق الأكثر تفصيلاً. بعض الأحداث القديمة، مثل Twitch DOM community_highlight، تحمل سلسلة نصية. تحقق من البنية الخاصة بالحدث قبل قراءة خصائص الكائن؛ وتوضع التفاصيل المنظمة الجديدة في كائن.
data.firsttime قيمة منطقية اضبطه على true عند تفعيل اكتشاف المشاركين لأول مرة وقاعدة البيانات المحلية، وكون هذه أول رسالة دردشة مخزنة لذلك المستخدم والمصدر. تستخدمه لوحة الإرساء لإبراز المشاركين لأول مرة ومرشحات الصفير الخاصة بهم؛ ويضيف إعداد شارة المشارك لأول مرة الاختياري شارة ورقة في بداية chatbadges.
data.lastactivity رقم طابع زمني Unix بالثواني لآخر نشاط دردشة مخزن سابقاً لذلك المستخدم، عند تفعيل اكتشاف المشاركين لأول مرة وقاعدة البيانات المحلية. يُحذف للمستخدمين الجدد تماماً.

نقل التحكم في التراكب منفصل عن الدردشة والأحداث الملتقطة. تستخدم المستقبِلات المحدّثة ssnControl غلافاً يحتوي على معرّف تسليم id، وميزة target، وقناة رد اختيارية ومعرّف عميل اللقطة. تبقى أجسام طلبات الميزات الموجودة كما هي. تستخدم عناصر التحكم العامة في الميزات القناة 7؛ وتحتفظ Actions بالقناة 6. تتضمن حالة Poll وMap حقل المضيف epoch, revision و reset كعلامة؛ ويستخدم Timer وTicker وSpotify ssnState مع epoch ورقم مراجعة. تصف هذه العلامات حالة المضيف، وليس سجل تصويت أو دردشة مستعاداً. يجب ألا تضيف المصادر حقول غلاف التحكم إلى الرسائل الملتقطة. إقرار الاستلام لا يثبت اكتمال الإجراء أو الظهور في OBS. راجع حالة الانتقال للميزات المدعومة والتفاوض بشأن الردود وحدود إعادة الاتصال.

تستخدم Phrase Guess الحقل الأصلي {response: text} كطلب لردود دردشة server2 و {action: "phraseGuessResponse", value: {type: "bot", chatname: name, chatmessage: text}} لإعلانات لوحة الإرساء فقط. يجب أن يفعّل المضيف رسائل server3 الواردة؛ ولا يزال تعطيل تحكم المضيف يحظر هذه الطلبات. تُمرر إعلانات لوحة الإرساء كصفوف دردشة روبوت عادية مع textonly: true، دون إرسالها إلى حقول إدخال دردشة مصادر الالتقاط. يحتفظ وضع API القديم بتنسيق أوامره الحالي.

قواعد meta

للحفاظ على اتساق لوحات المعلومات والأتمتة، اتبع هذه القواعد عند توسيع data.meta:

  • viewer_update, follower_update, subscriber_update، و likes_update تستخدم عدداً صحيحاً عادياً في meta كقيمة. likes_update إجمالي موثوق من المنصة: يجب على المستهلكين تعيين القيمة المعروضة بدلاً من إضافتها. يجمع نص الخلفية البرمجي أعداد المشاهدين في viewer_updates مع كائن مفاتيحه هي data.type.
  • giveaway_state لقطة يولدها المضيف ببيانات وصفية فقط للعروض المُدارة. meta.giveaway يتضمن الإصدار 2 giveawayId، والحقل المستمر roundId/epoch، مع زيادة generation عبر الجولات الجديدة، revision ضمن الجولة، status, open, draw, keyword, count, ticketCount، والحقل المجمد config، وما يصل إلى 120 معاينة من entrants، وآخر 20 من winners. تتيح الإدخالات id, name, platform و tickets؛ يضيف الفائزون drawnAt والقيمة الممنوحة points. يضيف Coin Flip Pot outcome؛ يضيف Number Hunt number مع الحقل العام low, high والحديثة guesses، ولا يُرسل السر أبداً. يصفّي المستهلكون حسب معرّف السحب ويتجاهلون الأجيال والمراجعات الأقدم. هذه عينات للعرض، وليست دفتر تذاكر كاملاً أو تعليمات دفع. تبقى مفاتيح المحافظ والأرصدة والحجوزات خارج لقطات الجمهور. ينشر المضيف إلى giveaway عبر تسمية P2P وخلاصات WebSocket المفعّلة للتراكبات؛ وهذا لا يعني الظهور في OBS. الدليل.
  • meta.giveawayControlResult يتضمن نتيجة إجراء سحب في Event Flow ‏(ok، والحقل الاختياري error, giveaway أو simulated). meta.giveawayHandled يسرد معرّفات السحوبات التي عالجها إجراء تدفق مشاركة أو شراء بالفعل كي لا يفرض أمر الدردشة التلقائي رسوماً عليها مجدداً. يضيف المحرر meta.economyTest لإجراءات السحب المحاكاة؛ ليس حدث منصة مصدر أو بيانات اعتماد للتفويض.
  • video_stats يستخدم حقلاً منظماً meta ككائن لحالة مُرمّز أو خادم خارجي، بما في ذلك provider, label, online, bitrateKbps, rttMs, bufferMs، وعدادات فقد الحزم أو إسقاطها، وتفاصيل الترميز الاختيارية.
  • قد تتضمن الأحداث الشبيهة بالتبرعات كائناً وصفياً: مثل { amount, currency, supporter } لـ Kick، { bits } لـ Cheers في Twitch. لأحداث العضوية بيانات وصفية خاصة بمصدرها؛ وهي ليست تبرعات نقدية تلقائياً.
  • تتضمن رسائل Webhook الموحّدة من Stripe وKo-fi وBuy Me a Coffee وFourthwall حقلاً خاصاً بنطاق المزوّد meta.webhookId، منسوخاً من معرّف الحدث الثابت لدى المزوّد، كي تستطيع الصفحات المستهلكة منع التكرارات الناتجة عن إعادة المحاولة والنقل المختلط.
  • تمرر غارات Twitch { fromId, fromLogin, viewers }. تختلف المصادر الأخرى: يستخدم Whatnot meta.numRaiders، بينما يستخدم SharePlay الحقل الاختياري meta.fromLogin/meta.viewers. تحقق من الصف الخاص بالمصدر قبل قراءة بيانات الغارة الوصفية.
  • تتيح عمليات استبدال المكافآت في Twitch EventSub meta.rewardId, cost, rewardTitle, redemptionId، والحقل القديم alias إلى جانب الرسالة المجهزة. قد توفر بطاقات مكافآت DOM والمصادر الأخرى حقولاً أقل أو مختلفة.
  • user_banned ببيانات وصفية فقط لأدوات الإشراف. ويتعمد حذف chatname و chatmessage؛ استخدم meta.username, meta.displayName, meta.avatarUrl، و meta.profileUrl.
  • ينبغي لوسائل نقل الدردشة التي تدعم مزامنة الحذف من تحكم المصدر إتاحة معرّف الدردشة الأصلي للمنصة كـ meta.messageId بدلاً من الاعتماد على الحقل الداخلي للوحة الإرساء data-mid كقيمة.
  • تستخدم عمليات حذف المصدر {delete: {type, id}} لمعرّف رسالة معروف في لوحة الإرساء، أو {delete: {type, meta: {messageId}}} لمعرّف رسالة أصلي للمنصة. يزيل المعرّف المعروف الرسائل المطابقة فقط. عندما لا يُعرف إلا المستخدم المستهدف، أرسل {delete: {type, userid}} أو {delete: {type, chatname}} لإزالة رسائل ذلك المستخدم من تلك المنصة. لا تستبدل هوية المشرف بهوية المستخدم المستهدف أبداً. لا تتطلب عمليات الحذف الواردة إعداد مزامنة الإشراف الاختياري من لوحة الإرساء إلى المنصة.
  • قد تضيف بيانات هوية المصدر الوصفية في SSApp meta.ssnAccountRole, meta.ssnSourceId، و meta.ssnSession عندما يُسند للمصدر دور حساب غير عادي.
  • يمكن لـ Event Flow طلب إبراز بضبط meta.featured = true على بيانات الدردشة، مما يبرز الرسالة تلقائياً في لوحة الإرساء وتراكبات الرسائل المميزة.
  • تراكب الأحداث بالذكاء الاصطناعي (AI Event Overlay): الإجراء showAiEventOverlay يرسل نسخة من الرسالة التي شغّلته إلى الجهة ذات الوسم aievent-CONFIGURATION_ID، مع إضافة meta.aiEventOverlay: {profile: "CONFIGURATION_ID"}. تُحفظ حقول الرسالة الحالية والبيانات الوصفية التي تكون على هيئة كائن؛ وتُحفظ البيانات الوصفية ذات القيمة المفردة في meta.value. هذا إرسال موجّه إلى جهة محددة، وليس حدثًا جديدًا من المنصة. لا تتغير الرسالة الأصلية. راجع دليل الإعداد.
  • اختياري meta.aiEventOverlay.variation يختار عبارة مطابقة تمامًا لعبارة معتمدة في إعدادات التراكب المحفوظة. يُملأ نص المشاهد والبيانات الوصفية في حقول القالب بعد إنشائه.
  • تتطلب طلبات عرض AI Event Overlay ملف إعداد ورمز العرض الخاص به. تُدار الإعدادات ومفاتيح API فقط من نافذة SSN المنبثقة المحلية. تستخدم الردود {aiEventResponse: {target, value}} أو {aiEventResponse: {target, error}}. تتضمن النتائج المُنشأة template, duration, warnings, وعناوين URL اختيارية لبيانات الوسائط في image/audio.
  • تستخدم مكافآت تراكب الذكاء الاصطناعي المدفوعة بالنقاط aiEventPresentation (id, profile, expiresAt, result, message)، وتؤكد الاستلام عبر aiEventDelivered (معرّف التسليم). تبقى سجلات خصم النقاط ومبالغ الاسترداد لدى المضيف.
  • يمكن لـ Event Flow طلب التثبيت في لوحة الإرساء بضبط meta.pinned = true؛ الحقل الاختياري meta.pinnedTarget يقصر ذلك التثبيت على لوحة إرساء تحمل القيمة المطابقة لـ label.
  • تسجل الطباعة الحرارية في Event Flow نتيجتها ضمن meta.thermalPrintResult (success والحقل الاختياري code/error)، مع الاحتفاظ بحدث الدردشة والبيانات الوصفية الأخرى. للأحداث ذات البيانات الوصفية الرقمية أو غير الكائنية، يبقى التشخيص في نتيجة الإجراء ويظل الحدث دون تغيير.
  • مكافآت ملصقات SSN الاختيارية: event: "sticker" لا يُرسل إلا إلى stickers كتسمية تراكب بعد خصم نقاط الولاء. ويضبط platform و type إلى حقل الرسالة الأصلية type، ويحافظ على chatname، مع حقل فارغ chatmessage, textonly: true، و contentimg يحتوي على مسار صورة نسبي مضمّن في الحزمة أو رابط وسائط HTTPS وافق عليه المضيف. meta.sticker يتضمن id, pack, name, cost, duration (ثوانٍ)، motion, redemptionId، و expiresAt (مللي ثانية Unix). هذه مكافأة SSN، وليست تبرع منصة أو حدث نقاط قناة أصلياً. راجع المعرض ودليل الإعداد.
  • يعيد مشغّل الملصقات حزمة تحكم {action: "stickerReceipt", meta: {sticker: {redemptionId, success}}} إلى مرسله عند تحميل الصورة أو فشلها. فقط إيصالات من نظير متصل stickers كي يحسم النظير عملية استبدال معلقة. يؤدي فشل التسليم أو عدم تأكيده إلى استرداد المبلغ؛ وحزمة التحكم هذه ليست حدث دردشة. يوصى بعرض ملصقات نشط واحد لكل جلسة.
  • تستخدم أوامر تراكب منصة الذكاء الاصطناعي { action: "aiOverlay", target, meta } أو يستخدم تشغيل صوت المقدّم المشارك الذي تتحكم فيه لوحة الإرساء { action: "cohostOverlay", target, meta }؛ احتفظ بجميع تفاصيل الأوامر مثل command, text, emotion, avatar، و tts داخل meta.
  • إذا أتاحت منصة عدة عدادات معاً، ففضّل كائناً منظماً بمفاتيح صريحة (meta.viewer_count, meta.follower_count) بدلاً من تحميل السلاسل النصية معاني زائدة.
  • ينبغي لتراكبات التجارة استخدام كائنات اللقطات ضمن meta (على سبيل المثال auction_update و commerce_update) وتجنب الحقول المخصصة غير القياسية في المستوى الأعلى.

تغطية المنصات

YouTube — التقاط DOM القياسي

التنفيذ: sources/youtube.js

  • أبقِ علامة تبويب الدردشة المباشرة مفتوحة. يقرأ الالتقاط بطاقات العضوية والهدايا المعروضة في تلك الجلسة؛ ولا يتطلب أن يكون المشاهد مالك القناة أو مشرفاً. قد تؤثر صلاحيات الحساب وعرض الدردشة المحدد في الصفوف الظاهرة.
  • يؤدي فتح تراكب عدد المشاهدين ونشاط الدردشة مع إظهار المشاهدين إلى طلب أعدادهم تلقائيًا. كما أن الخيارين عرض عدد المشاهدين و تتبّع المشاركين النشطين في الدردشة يفعّلان جمع البيانات أيضًا.
  • لتنبيهات المتابعين والأحداث الإضافية، فعّل وضع WebSocket في إعدادات الإضافة.
الحدث متى يُشغّل ملاحظات البيانات
sponsorship عنوان ترحيب بعضوية دون نص دردشة صريح (أعضاء جدد أو وصول حزم مُهداة)، بما في ذلك بطاقات الترحيب المنظمة أو نص «مرحباً بك في…» المترجم. membership يُملأ بترجمة «MEMBERSHIP»؛ subtitle يتضمن السلسلة أو الفئة عند اكتشافها؛ nameColor يستخدم اللون الأخضر للعضوية عندما يُسمح بذلك.
giftpurchase لافتة شراء حزمة هدايا (ytd-sponsorships-live-chat-gift-purchase). membership يصبح gift_giver; subtitle يحمل عدد الهدايا عند معرفته؛ دون hasDonation أو donoValue.
giftredemption إعلان استلام الهدية للمستلِمين. membership يصبح «MEMBERSHIP»؛ subtitle يتضمن «أُهدي بواسطة…».
resub لافتات ترقية تتضمن «تمت الترقية إلى…». subtitle يلتقط تسمية الفئة الجديدة؛ membership يبقى «MEMBERSHIP».
superchat, supersticker, jeweldonation Super Chats وSuper Stickers وبطاقات إعلان التبرعات وهدايا YouTube التي تستخدم Jewels ‏(yt-gift-message-view-model). hasDonation يحمل القيمة؛ event يحدد نوع العنصر المدفوع في YouTube. تستخدم هدايا YouTube N Jewels عند وجوده، أو 1 YouTube Gift عندما يخفي YouTube العدد. تستخدم صور الهدايا contentimg، وتستخدم تسميات الهدايا subtitle، وتُنسخ التفاصيل الدنيا للهدية أيضاً ضمن meta.youtubeGift.
jeweldonation تأثير هدية يعرض YouTube هدية Jewel متحركة فوق الدردشة المباشرة (ytls-gift-overlay-item-view-model). يُرسل مباشرةً إلى هدف GIF/الوسائط المخصص كي تُشغّل الحركة دون تكرار صف الهدية العادي. contentimg يحمل الأصل المتحرك و meta.youtubeGift.animationUrl/animationDescription تحافظ على تفاصيل التأثير.
reaction يظهر تفاعل مشاهد في نافورة الرموز التعبيرية المباشرة في YouTube. يُرسل مباشرةً إلى هدف التفاعلات المخصص. يُحتفظ بالرمز التعبيري المجهول ورابط الصورة في chatmessage/contentimg وضمن meta.reactionType/reactionImage. تشمل الأشكال المباشرة المعروفة ❤ و😄 و🎉 و😳 و💯.
thankyou رسالة بديلة عند وجود مبلغ تبرع دون توفير نص دردشة. يحتفظ بـ hasDonation ويضيف تلقائياً «شكراً على تبرعك!» للتراكبات.
redirect تظهر لافتة إعادة توجيه YouTube في الدردشة المباشرة (أقرب ما يعادل إشعار غارة). التقاط DOM فقط من yt-live-chat-banner-redirect-renderer. يضبط event إلى redirect ويستخدم membership كتسمية كي تعرضه التراكبات مثل إشعارات النظام الأخرى.
viewer_update استطلاع نقطة نهاية المشاهدين في Social Stream كل 30 ثانية (مع الرجوع إلى استخراج الصفحة عند أخطاء الحصة). meta هو عدد المشاهدين المباشرين الصحيح؛ ويسهم في الإجمالي المجمع viewer_updates في نص الخلفية البرمجي.

تضبط كتل العضوية أيضاً membership لدردشة المشرفين أو الأعضاء، بينما subtitle يحمل إما عدد الأشهر أو أسماء الفئات. sourceName/sourceImg تُملأ بمجرد getChannelInfo ينجح. تتضمن دردشة DOM القياسية الآن meta.messageId عندما يتيح YouTube معرّفاً أصلياً لرسالة الدردشة المباشرة، تستخدمه لوحة الإرساء لمزامنة الحذف.

YouTube — التقاط WebSocket/Data API

التنفيذ: sources/websocket/youtube.html، وأدوات المساعدة المشتركة ضمن shared/

  • نطاقات OAuth الافتراضية هي youtube.readonly و youtube.channel-memberships.creator. تضيف صلاحية الكتابة الاختيارية youtube.force-ssl لإرسال الدردشة والإشراف والحظر وتعديل تفاصيل البث؛ قد تعرض Google ذلك كصلاحية واسعة لإدارة YouTube لأن YouTube لا يوفر نطاق كتابة يقتصر على الدردشة.
  • تراعي إحصاءات القناة المفاتيح الخاصة بكل إعداد (showsubscount, showviewercount).
  • لا تستطيع API تقديم صور شارات مخصصة؛ تستخدم بدائل الشارات أيقونات الرموز التعبيرية المذكورة أدناه.
  • عندما تبلغ API صراحةً عن authorDetails.isChatModerator: true، تتضمن بيانات الدردشة وSuper Chat وSuper Sticker وYouTube Gift وهدايا العضوية mod: true. لا تُستنتج حالة المشرف ولا تُخزن مؤقتاً بين الأحداث.
  • تستخدم تنبيهات المشتركين الجدد myRecentSubscribers API (استطلاع كل 5 دقائق). ملاحظة: قد تتأخر النتائج أو تكون غير مكتملة؛ لا يمكن تحديد إلا الاشتراكات الظاهرة للعامة.
  • لا تتيح Data API لافتات إعادة التوجيه في YouTube، لذا redirect يظل متاحاً فقط من التقاط DOM القياسي.
الحدث متى يُشغّل ملاحظات البيانات
superchat إدخالات Super Chat من محفوظات Data API أو استطلاع البث. hasDonation يحافظ على مبلغ الموقع (العملة والقيمة)؛ event هي superchat. استخدمت إصدارات WebSocket الأقدم event: "donation" لهذا الصف، لذا يمكن للمستهلكين الاستمرار في قبوله كاسم بديل قديم.
supersticker Super Stickers (نص رسالة بديل فقط، دون صورة من API). hasDonation يحتوي على المبلغ؛ chatmessage يتضمن نص الوصف بعد فك ترميزه.
jeweldonation YouTube giftEvent كرسائل عندما يستبدل المشاهدون Jewels بهدايا. hasDonation يحتوي على N Jewels، أو 1 YouTube Gift عندما يخفي YouTube العدد؛ contentimg يستخدم رابط أصل الهدية عند إتاحته؛ subtitle يحمل تسمية الهدية؛ meta.youtubeGift يحمل تفاصيل هدية إضافية.
sponsorship ينضم عضو جديد عبر newSponsorEvent. membership يصبح new_sponsor أو new_member; meta يتضمن originalEventType، والمدد، ومعلومات المستوى.
resub تجديدات العضوية أو ترقية الفئات. membership يصبح renewed_member (تجديدات) أو upgraded_member (ترقيات)؛ subtitle يعرض الفئة.
giftpurchase حزم هدايا مشتراة عبر API. membership مضبوطاً على gift_giver; subtitle يسرد العدد أو الفئة؛ دون hasDonation أو donoValue.
giftredemption إشعارات استلام الهدايا. membership gift_recipient؛ الشارة الافتراضية 🎁؛ subtitle يشير إلى الفئة المُهداة.
membermilestone دردشات محطات الإنجاز (memberMonth أو displayMessage موجود). membership member_milestone; subtitle يلخص الأشهر والفئة؛ meta يلتقط تعيين محطة الإنجاز الخام.
viewer_update إحصاءات البث (المشاهدون المتزامنون) عند تفعيل الإبلاغ عن المشاهدين. meta عدد صحيح؛ يطابق برمجة DOM كي يستطيع المستهلكون دمج المسارين. لوحة إرساء تستخدم &showviewercount يطلب جمع عدد المشاهدين لمدة 70 دقيقة، ويجدد ذلك الطلب كل ساعة دون تغيير الإعداد العام بصورة دائمة.
likes_update استطلاع إحصاءات الفيديو الرسمية عندما إرسال إجماليات الإعجاب من المنصة مفعّل. meta هو عدد الإعجابات الحالي للفيديو كعدد صحيح. يصدر عند تغير العدد ودورياً أثناء ثباته كي تبقى بيانات المستهلكين حديثة. الخيار العام captureliketotals يفعّل الإعداد هذا؛ أما الخيار القديم captureyoutubelikes يظل اسماً بديلاً للتوافق. يؤدي تفعيل خيار النافذة المنبثقة الخاص بكل لوحة إرساء &showlikecount يفعّل الخيار أيضاً إعدادات الالتقاط العامة تلك بصورة دائمة، بينما تتحكم إضافة معامل URL يدوياً في العرض فقط. لا يؤدي إيقاف خيار العرض إلى تعطيل الجمع العام.
subscriber_update استطلاع إحصاءات القناة (المشتركون) عندما showsubscount غير معطّل صراحةً. meta هو إجمالي المشتركين؛ وتحدّث الواجهة عدادات لوحة المعلومات.
view_update استطلاع إحصاءات القناة (المشاهدات طوال عمر القناة) عندما showviewercount أو كان وضع الحماس نشطاً. meta هو عدد المشاهدات الصحيح.
live_chat_ended تصبح الدردشة المباشرة غير متاحة للبث المرتبط. meta.streamTitle يُملأ عندما تكون بيانات البث الوصفية مخزنة مؤقتاً.
user_banned userBannedEvent من API الدردشة المباشرة أو تدفق gRPC. حدث ببيانات وصفية فقط لأدوات الإشراف. meta يتضمن اسم المستخدم أو العرض ومعرّف القناة ورابط الصورة الرمزية أو الملف الشخصي والمشرف ومدة الحظر أو الإيقاف المؤقت وما إذا كان دائماً.
new_follower يُكتشف مشترك جديد عبر myRecentSubscribers API (استطلاع كل 5 دقائق). chatname هو اسم قناة المشترك؛ chatmessage فارغ ما لم تُفعّل رسائل تنبيه المشتركين في صفحة مصدر YouTube. meta يتضمن channelId, title, subscribedAt، وتضيف الدفعات المجمعة grouped, count, others، و subscribers. ملاحظة: قد تتأخر النتائج أو تكون غير مكتملة؛ لا يمكن تحديد إلا الاشتراكات الظاهرة للعامة.

تستخدم رسائل الدردشة الممررة من API meta.plainText للرسالة النصية العادية إلى جانب الحقل الغني chatmessage كمحتوى. إنه نص وليس HTML، ويمكن أن يتضمن رموز Unicode التعبيرية. تستخدم شارات العضوية رموزاً تعبيرية بديلة (⭐, 💝, 🏅، وغيرها) للحفاظ على الاتساق مع التقاط DOM. تتضمن بيانات الدردشة العادية أيضاً meta.messageId كي تستطيع إجراءات الحذف في لوحة الإرساء العودة إلى API الإشراف في YouTube.

تنبيهات المشتركين في YouTube ‏(new_follower)

يمكن لـ Social Stream الآن اكتشاف المشتركين الجدد في YouTube باستخدام myRecentSubscribers كنقطة نهاية API. يعمل هذا بصورة مشابهة لتنبيهات المشتركين في Streamlabs.

كيف يعمل:

  • يستطلع YouTube API كل 5 دقائق لمعرفة المشتركين الجدد
  • يتتبع المشتركين الذين سبق رصدهم في localStorage لاكتشاف الجدد
  • يصدر new_follower كأحداث تتضمن اسم المشترك وصورته الرمزية ومعرّف القناة
  • يبقي رسائل تنبيه المشتركين معطّلة افتراضياً؛ ويستخدم تفعيلها سلسلة الترجمة الحالية لـ alert-just-subscribed
  • يجمع دفعات تزيد على ثلاثة مشتركين جدد افتراضياً كي لا تغمر إعادة الاتصال التراكبات أو Event Flow
  • يتطلب تفعيل وضع WebSocket في إعدادات الإضافة

القيود (هذه قيود YouTube API، وليست قيود Social Stream):

  • لا يوجد تأخير تسليم مضمون — يستطلع SSN كل خمس دقائق، لكن API قد تعيد نتائج متأخرة أو غير مكتملة. لا تعتمد على فترة ثابتة من أربع ساعات.
  • الاشتراكات العامة فقط — لن يشغّل المشتركون الذين جعلوا قائمة اشتراكاتهم خاصة تنبيهات. الاشتراكات خاصة افتراضياً على YouTube.
  • مالك القناة فقط — لا يمكنك تلقي تنبيهات المشتركين إلا للقنوات التي تملكها وتستخدم المصادقة بهويتها.
  • استخدام حصة API — يكلف كل استطلاع وحدة API واحدة. بفاصل 5 دقائق، يستهلك هذا نحو 288 وحدة يومياً (من الحصة اليومية الافتراضية البالغة 10,000).

مشغّل محرر Event Flow: استخدم data.event === "new_follower" و data.type === "youtube"

YouTube WebSocket: مرجع سريع للأحداث والعضويات

data.event data.membership السيناريو
sponsorshipnew_sponsorعضو جديد عبر newSponsorEvent
sponsorshipnew_memberعضو جديد عبر processMembership
resubrenewed_memberتجديد العضوية
resubupgraded_memberترقية الفئة
giftpurchasegift_giverعضويات مُهداة للقناة
giftredemptiongift_recipientاستلام عضوية مُهداة
membermilestonemember_milestoneدردشة ذكرى العضوية
superchat-Super Chat
supersticker-Super Sticker
user_banned-حدث حظر أو إيقاف مؤقت ببيانات وصفية فقط
new_follower-مشترك جديد (بالاستطلاع الدوري؛ قد يتأخر)

Twitch — التقاط DOM القياسي

التنفيذ: sources/twitch.js

  • أبقِ دردشة Twitch مفتوحة. تُلتقط إشعارات العضوية والمستخدمين عندما يعرضها Twitch؛ ولا تقتصر على حسابات المذيعين أو المشرفين. قد تلزم المصادقة للميزات الخاصة بالحساب.
  • تصل طلبات عدد المشاهدين إلى https://api.socialstream.ninja/twitch/viewers كل 30 ثانية.
  • لتنبيهات المتابعين والغارات والدعم الكامل للأحداث، فعّل وضع WebSocket في إعدادات الإضافة.
  • تكون إشعارات سلسلة المشاهدة التي يشاركها المشاهد معطّلة افتراضياً، وتتطلب عرض سلاسل المشاهدة المتتالية في Twitch كإعداد.
  • الخيار الاختياري PluralMind قد يستبدل الإعداد chatname, nameColor، والجزء المغلّف عبر الوكيل من chatmessage، وقد يضيف شارة نصية للضمائر. username يبقى اسم تسجيل دخول Twitch؛ وتحمل عمليات الحذف ذات الصلة delete.meta.pluralmind كي تستخدم لوحة الإرساء اسم تسجيل الدخول الثابت هذا.
الحدث متى يُشغّل ملاحظات البيانات
reward بطاقات استبدال نقاط القناة (بما في ذلك حاوية مكافآت 7TV). chatmessage يتضمن نص الاستبدال؛ membership دون تغيير.
giftpurchase سطور نظام مثل «يُهدي المستخدم X اشتراكات في القناة». chatmessage هو سطر النظام، مما يتيح للتراكبات إبراز حملات مُهدي الهدايا.
subscription_gift إشعارات الاشتراكات المُهداة («أهدى المستخدم اشتراكاً إلى…»). يضع علامة على الحدث لمرشحات الإبراز؛ membership يبقى تسمية شارة المستلِم.
viewer_update جلب كل 30 ثانية إلى وكيل المشاهدين في Social Stream (قيمة بديلة 0 عند الخطأ). meta عدد صحيح للمشاهدين.
hype_train يعرض إبراز المجتمع المثبت في Twitch قطار حماس نشطاً في الدردشة المنبثقة. بديل DOM ببيانات وصفية فقط مع meta.sourceMode مضبوطاً على dom. يستخدم المستوى والمؤقت الظاهرين و meta.progressPercent عندما لا يتيح Twitch إجماليات نقاط EventSub.
community_highlight عناصر داخل أداة «Community Highlight» في Twitch. meta هو نص الإبراز المستخرج لربطه بالأتمتة.
knock دعوات التعاون في Stream Together المعروضة فوق الدردشة. chatmessage يتضمن نص الدعوة؛ chatname يُشتق من مستخدم التنبيه عند توفره.
watch_streak إشعار سلسلة مشاهدة يشاركه المشاهد اختيارياً ويُعرض في دردشة Twitch. meta.streakCount يتضمن العدد الظاهر عند اكتشافه؛ meta.milestoneId يستخدم معرّف إشعار DOM عند توفره.

تملأ Bits/Cheers hasDonation (مثل «500 bits») رغم أن data.event يبقى فارغاً؛ اعتمد على ذلك الحقل عند عرض أدوات التبرعات. تظهر معلومات سلسلة اشتراك المشترك في subtitle عندما تكشف الشارات عن الأشهر.

Twitch — EventSub/WebSocket

التنفيذ: sources/websocket/twitch.js مع النواة المشتركة providers/twitch/chatClient.js

  • نطاقات OAuth: chat:read, chat:edit, user:write:chat, bits:read, moderator:read:followers, moderator:read:chatters, channel:read:subscriptions, channel:read:hype_train, channel:moderate, moderator:manage:banned_users, moderator:manage:chat_messages, channel:manage:broadcast, channel:read:redemptions, channel:read:ads, channel:manage:ads. تتيح رموز المذيع أعداد المشتركين والمتابعين.
  • أحداث يرسلها EventSub، إضافةً إلى استطلاع Helix لإجماليات المشاهدين والمتابعين والمشتركين.
  • يوفر وضع WebSocket بيانات آنية لـ لتنبيهات المتابعين وأحداث الاشتراك والغارات وCheers وPower-ups واستبدال نقاط القناة وبيانات قطار الحماس الوصفية.
  • تستخدم صفوف الدردشة المشتركة Twitch IRC source-room-id لملء sourceName/sourceImg مع القناة الأصلية عندما تختلف عن القناة المتصلة.
  • تكون إشعارات سلسلة المشاهدة التي يشاركها المشاهد معطّلة افتراضياً، وتتطلب عرض سلاسل المشاهدة المتتالية في Twitch كإعداد.
  • الخيار الاختياري PluralMind قد يستبدل الإعداد chatname, nameColor، والجزء المغلّف عبر الوكيل من chatmessage، وقد يضيف شارة نصية للضمائر. username و userid تحافظ على هوية Twitch؛ وتحمل عمليات الحذف ذات الصلة delete.meta.pluralmind كي تستخدم لوحة الإرساء تلك الحقول الثابتة.
الحدث متى يُشغّل ملاحظات البيانات
cheer إشعارات Cheer من EventSub channel.bits.use. hasDonation «N bits»؛ meta.bits رقمي؛ chatmessage يحافظ على الرسالة الخام؛ يتضمن المشجعون المعروفون chatimg.
powerup إشعارات Power-up المدمجة أو المخصصة من EventSub channel.bits.use. بيانات حدث فقط مع حقل فارغ chatmessage ودون hasDonation، ولذلك لا ينشئ صف دردشة عادياً. meta.bits رقمي و meta.powerUp يحافظ على النوع الفرعي في Twitch والعنوان أو معرّف المكافأة وتفاصيل التأثير ونص الرسالة المقدم عند توفره.
new_subscriber channel.subscribe أو USERNOTICE مع msg-id=sub. meta يتضمن { userId, tier, isGift }؛ يزداد إجمالي المشتركين المخزن مؤقتاً عند توفره؛ ويُستعلم عن إجماليات المشاهدين بشكل منفصل.
resub channel.subscription.message أو USERNOTICE msg-id=resub. meta يحمل السلسلة والأشهر التراكمية؛ chatmessage يتضمن نص إعادة الاشتراك.
subscription_gift channel.subscription.gift أو USERNOTICE msg-id=subgift. meta يتيح إجمالي الهدايا والفئة؛ chatmessage يلخص الإجراء.
reward channel.channel_points_custom_reward_redemption.add. meta يتضمن معرّف المكافأة وعنوانها وتكلفتها ونص الطلب وإدخال المستخدم ومعرّف الاستبدال وحالته والاسم البديل القديم. دون حقل في المستوى الأعلى باسم reward ككائن يصدره معالج EventSub هذا. قد يظل المستهلكون الأقدم يعرضون channel_points كاسم بديل مهمل.
raid EventSub channel.raid أو USERNOTICE msg-id=raid. meta = { fromId, fromLogin, viewers }.
watch_streak إشعار Twitch IRC USERNOTICE اختياري مع msg-id=viewermilestone و msg-param-category=watch-streak. يتضمن المشاهد في chatname، ونص إشعار Twitch في chatmessage، و meta.streakCount/meta.milestoneId. تظل أنواع USERNOTICE العامة الأخرى متجاهلة.
new_follower channel.follow إشعارات EventSub. يزيد تلقائياً follower_update; meta يسجل { userId, followedAt }.
viewer_update Helix streams باستطلاع كل 30 ثانية. meta عدد صحيح للمشاهدين؛ يُحجب ما لم تُفعّل إحصاءات المشاهدين في الإعدادات.
follower_update إجمالي المتابعين من Helix، يُطلب بعد أحداث المتابعة أو باستطلاع دوري. meta عدد صحيح للمتابعين.
subscriber_update إجمالي المشتركين من Helix (يتطلب رمز المذيع مع نطاق صلاحية الاشتراكات). meta عدد صحيح للمشتركين.
stream_online / stream_offline EventSub stream.online/stream.offline. meta.startedAt موجود لأحداث الاتصال؛ وتستخدم حالة عدم الاتصال كائناً فارغاً.
ad_break / ad_request / ad_schedule استجابات API لمدير الإعلانات (channel.ad_break.begin، واليدوي POST channels/ads, GET channels/ads). meta يفصّل المدة وصاحب الطلب وبيانات الجدول للوحات المعلومات.
hype_train EventSub channel.hype_train.begin, channel.hype_train.progress، و channel.hype_train.end كإشعارات v2. حدث ببيانات وصفية فقط: دون chatname أو chatmessage. meta.phase هي begin, progress، أو end; meta يتضمن معرّف القطار والمستوى والتقدم والهدف والإجمالي والمساهمين وحقول التوقيت وعلامة القطار المشترك و trainType. تُعرض قطارات الكنز عبر meta.trainType عندما يسميها Twitch كذلك.
user_banned EventSub channel.ban، أو IRC CLEARCHAT كبديل عند عدم توفر أحداث حظر EventSub. حدث ببيانات وصفية فقط لأدوات الإشراف. meta يتضمن اسم المستخدم أو العرض ومعرّف المستخدم ورابط الصورة الرمزية أو الملف الشخصي والمشرف والسبب ومدة الحظر أو الإيقاف المؤقت وما إذا كان دائماً.

تعيد بيانات الدردشة استخدام المزوّد المشترك، ولذلك data.event يُملأ للأمر `/me` ‏(action) والحقل القديم bits كوسوم حتى خارج تدفقات EventSub. تضع رسائل GIF في Twitch أصل Giphy في contentimg، اترك chatmessage فارغاً، واحتفظ بالتسمية البديلة من Twitch في meta.gifLabel. تستخدم آلية إزالة التكرار والحذف معرّفات الرسائل؛ وتستخدم الرسائل المرسلة عبر SSN الحقل الأصلي message_id من صدى IRC الخاص بـ Twitch في data.id.

البيانات الوصفية لقطار الحماس في Twitch

hype_train ببيانات وصفية فقط ولا يتضمن chatname أو chatmessage. ينبغي للوحات المعلومات تحديث عرض قطار موجود باستخدام meta.id بدلاً من إضافة كل تحديث تقدم كدردشة. شريط البيانات الوصفية (meta.html) يعرض هذه الأحداث كشريط تقدم علوي.

الحقل اكتب ملاحظات
typeسلسلة نصيةدائماً twitch.
eventسلسلة نصيةدائماً hype_train.
meta.phaseسلسلة نصيةbegin, progress، أو end.
meta.idسلسلة نصيةمعرّف قطار ثابت. استخدمه لإضافة أو تحديث أداة قطار ظاهرة واحدة.
meta.broadcasterUserIdسلسلة نصيةمعرّف مستخدم المذيع في Twitch.
meta.broadcasterUserLoginسلسلة نصيةاسم تسجيل دخول المذيع في Twitch.
meta.broadcasterUserNameسلسلة نصيةاسم عرض المذيع في Twitch.
meta.totalرقم | nullإجمالي قيمة الدعم التي يبلغ عنها Twitch للقطار.
meta.progressرقم | nullالتقدم الحالي نحو هدف المستوى.
meta.goalرقم | nullهدف المستوى الحالي.
meta.progressPercentرقم | nullنسبة مئوية بديلة من DOM عندما لا يتيح Twitch إلا شريط التقدم الظاهر في النافذة المنبثقة.
meta.levelرقم | nullمستوى القطار الحالي أو النهائي.
meta.topContributionsمصفوفةأبرز المساهمين. يتضمن كل إدخال userId, userLogin, userName, type، والحقل الرقمي total.
meta.lastContributionكائن | nullأحدث مساهمة، باستخدام بنية المساهمة نفسها مثل topContributions.
meta.sharedTrainParticipantsمصفوفةبيانات المشاركين الخام في القطار المشترك من Twitch عند توفرها.
meta.startedAtسلسلة نصيةطابع زمني ISO لبدء القطار.
meta.expiresAtسلسلة نصيةطابع زمني ISO لانتهاء صلاحية القطار الحالي.
meta.endedAtسلسلة نصيةطابع زمني ISO لنهاية القطار، أو فارغ قبل نهايته.
meta.cooldownEndsAtسلسلة نصيةطابع زمني ISO لنهاية فترة الانتظار، أو فارغ قبل انتهائها.
meta.isSharedTrainقيمة منطقيةتكون true عندما يصنّف Twitch القطار كمشترك.
meta.trainTypeسلسلة نصيةعادةً regular؛ تُعرض قطارات الكنز هنا عندما يسميها Twitch كذلك.
meta.allTimeHighLevelرقم | nullأعلى مستوى للقطار على الإطلاق عندما يوفره Twitch.
meta.allTimeHighTotalرقم | nullأعلى إجمالي للقطار على الإطلاق عندما يوفره Twitch.
meta.sourceModeسلسلة نصيةعلامة مصدر اختيارية مثل dom.
meta.eventSubTypeسلسلة نصيةنوع EventSub الأصلي: channel.hype_train.begin, channel.hype_train.progress, channel.hype_train.end، أو dom.community_highlight.

Twitch EventSub: مرجع سريع للأحداث

data.event السيناريو
new_followerتابع مستخدم القناة
new_subscriberاشتراك جديد
resubإعادة اشتراك مع رسالة
subscription_giftاشتراكات مُهداة للقناة
cheerBits مُرسلة للتشجيع
powerupاستخدام Power-up مدمج أو مخصص
rewardاستبدال نقاط القناة
raidغارة واردة
viewer_updateعدد المشاهدين المتزامنين
follower_updateإجمالي المتابعين
subscriber_updateإجمالي المشتركين
stream_onlineبدأ البث المباشر
stream_offlineانتهى البث
ad_breakبدأ فاصل إعلاني
hype_trainبيانات وصفية لحالة Hype Train/Treasure Train
user_bannedحُظر مستخدم أو أُوقف مؤقتاً

إجراءات OBS في Flow Actions

التنفيذ: actions.html عبر أحداث OBS WebSocket v5، مع dock.html أحداث مصدر متصفح OBS كبديل

  • أبقِ تراكب Flow Actions مفتوحاً بجلسة Social Stream نفسها المستخدمة في محرر Event Flow أو الخلفية، أو أبقِ لوحة الإرساء محمّلة داخل OBS.
  • اضبط OBS WebSocket v5 في OBS 28+؛ الرابط الافتراضي هو ws://127.0.0.1:4455.
  • هذه أحداث نظام في Event Flow. ولا تتضمن chatname أو chatmessage، وتبقى تفاصيل OBS الإضافية داخل meta.
الحدث متى يُشغّل ملاحظات البيانات
stream_started يبلغ OBS عن وصول مخرج البث إلى حالة البدء. type هي obs; event هي stream_started; meta.source هي obs-websocket أو obs-browser-source; meta.outputState قد يحمل حالة مخرجات OBS الخام.
stream_stopped يبلغ OBS عن وصول مخرج البث إلى حالة التوقف. type هي obs; event هي stream_stopped; meta.outputActive قد يكون false.
recording_started يبلغ OBS عن بدء التسجيل. type هي obs; meta.obsEvent يحدد مصدر حدث OBS.
recording_stopped يبلغ OBS عن توقف التسجيل. type هي obs; meta.outputState قد يحمل حالة WebSocket الخام.
scene_changed يغيّر OBS مشهد البرنامج النشط. type هي obs; meta.sceneName يتضمن اسم المشهد عندما يوفره OBS.
media_ended ينتهي تشغيل مُدخل وسائط في OBS. type هي obs; meta.inputName و meta.inputUuid تحدد مُدخل الوسائط.
replay_buffer_saved يحفظ OBS ذاكرة إعادة العرض. type هي obs; meta.savedReplayPath قد يتضمن مسار إعادة العرض المحفوظ.

صندوق تنبيهات Streamlabs

التنفيذ: sources/streamlabs.js (DOM لصندوق التنبيهات)؛ جسر مقبس اختياري على sources/websocket/streamlabs.html

  • أبقِ صندوق تنبيهات Streamlabs مفتوحاً في علامة تبويب أو مصدر متصفح كي تُعرض التنبيهات؛ يقرأ نص المحتوى البرمجي DOM الخاص بالتنبيه للرسالة والصورة والرموز.
  • تضبط التنبيهات الشبيهة بالتبرعات hasDonation (مثل «$10 USD» أو «100 bits») والحقل الاختياري donoValue بالدولار الأمريكي.
  • أنواع الأحداث المستنتجة: follow, subscription, gift, cheer, donation, superchat, raid, redeem, merch, sponsor.
  • للجسر عبر المقبس، الصق رمز Streamlabs Socket API واتصل؛ تُمرر التنبيهات دون صفحة صندوق التنبيهات.
الحدث متى يُشغّل ملاحظات البيانات
donation تنبيهات التبرعات أو الأعمال الخيرية أو JustGiving أو تنبيهات «تبرّع» العامة. hasDonation يحافظ على نص العملة (مثل «$36» أو «$10 CAD»)؛ donoValue لا يُقدَّم إلا عند توفر قيمة بالدولار الأمريكي؛ وتستخدم المبالغ الأخرى ذات التسميات تحويل العملات المشترك.
cheer تنبيهات bits/cheer في Twitch. hasDonation يصبح «100 bits» و donoValue يلتقط القيمة بالدولار الأمريكي.
subscription تنبيهات الاشتراك. تُضبط الحقول القياسية؛ chatmessage هو سطر التنبيه؛ meta.tokens يحمل القيم الرمزية (name وamount وlevelName وغيرها).
gift عضويات أو اشتراكات مُهداة. meta.tokens.amount قد يعرض عدد الهدايا؛ meta.tokens.levelName يمكن أن يحتوي الفئة.
follow تنبيهات المتابعين. دون حقول تبرعات؛ chatname يعكس رمز اسم التنبيه.
raid تنبيهات الغارات. meta.tokens.count يحتوي على عدد المشاركين في الغارة عند وجوده.
redeem تنبيهات استبدال Cloudbot. meta.tokens.product يلتقط عنصر الاستبدال.
merch تنبيهات شراء البضائع. meta.tokens.product يتضمن اسم العنصر المشترى.
superchat تنبيهات بنمط Super Chat من YouTube أو تكاملات التنبيهات المدعومة. hasDonation يحمل المبلغ؛ يمكن للمستهلكين الاستمرار في قبول الحقل القديم donation كأسماء بديلة.
sponsor تنبيهات بنمط الرعاية أو العضوية يعرضها Streamlabs. حقول قياسية؛ دون تبرع ما لم يتضمن النص مبلغاً.

TikTok Live — التقاط DOM وخلاصة TikFinity

التنفيذ: sources/tiktok.js لصفحات TikTok الأصلية و sources/tikfinity.js لأداة أو iframe خلاصة النشاط في TikFinity. لا يزال SSApp يضم تكاملاً أصلياً مع TikTok يوفّر أوسع تغطية للأحداث (راجع توثيق SSApp).

  • يعمل على صفحة البث المباشر للمذيع. لا تُملأ لافتات الهدايا والإعجابات والمتابعات إلا عندما تكون الجلسة مصادَقاً عليها.
  • يوفر TikTok أحداثاً كثيرة عبر اكتشاف DOM دون اشتراط وضع WebSocket — تُلتقط الهدايا والمتابعات والإعجابات والانضمامات الاختيارية من الصفوف المعروضة.
  • صفحات أدوات TikFinity على tikfinity.zerody.one/widget/activity-feed* تعمل أيضاً. يصدر iframe المضمن لخلاصة النشاط حقول بيانات TikTok القياسية نفسها للدردشة والمتابعات والمشاركات والهدايا والاشتراكات والانضمامات الاختيارية وصناديق الكنز.
  • لا تتطلب مصادقة API إضافية.
  • الوضع الأصلي في SSApp لا يزال يضيف أحداثاً تتجاوز مسارات التقاط الصفحة أو الأداة: question_new, emote, viewer_update، والإجمالي الذي يُفعّل اختيارياً likes_update.
الحدث متى يُشغّل ملاحظات البيانات
gift صفوف لافتات الهدايا أو DivGiftMessage كإدخالات. hasDonation يحوّل إلى «N coins» (مع جدول الهدايا كخيار بديل)؛ membership يستخدم نص الشارة عند توفره.
joined إشعارات الانضمام عندما يكون الخيار العام التقاط أحداث الانضمام «joined» إلى البث مفعّلاً كإعداد. يتخطى إشعارات المشاركة؛ chatname قد يكون فارغاً لبعض نصوص النظام.
followed رسائل متابعة محللة من البطاقات الاجتماعية. يضمن chatname موجود قبل الإصدار.
shared صفوف المشاركة في TikFinity. chatmessage هو نص المشاركة المعروض.
subscribe صفوف الاشتراك في TikFinity. membership يُضبط على SUBSCRIBER.
envelope صفوف صندوق الكنز في TikFinity. meta.coins و meta.canOpen تحمل تفاصيل الصندوق.
liked ملخصات عواصف الإعجاب التي تشغّلها البطاقات الاجتماعية في TikTok. chatname يُدرج عندما يتيحه TikTok؛ وقد تظل بطاقات الإعجاب المجهولة أو النظامية تصدر. يرسل TikTok هذا عبر مسار الخلفية العادي. توجه الخلفية نسخة واحدة إلى تراكب التفاعلات، ثم تتابع إلى مسار الدردشة والأحداث الرئيسي فقط عندما capturelikeevent مفعّل.
likes_update يتلقى SSApp إجمالياً تراكمياً موثوقاً من TikTok LIVE بينما captureliketotals مفعّل. meta هو الإجمالي الحالي كعدد صحيح. يرسل SSApp القيمة الأولى فوراً، ويجمع الدفعات في تحديث واحد كل خمس ثوانٍ على الأكثر، ويكرر أحدث قيمة كل نحو 90 ثانية، ويرسل صفراً عند انتهاء البث. هذا منفصل عن الحدث الخاص بكل مشاهد liked كأحداث.
true (قيمة منطقية) رسائل اجتماعية أو نظامية عامة عندما لا يوفر TikTok نوعاً فرعياً. استخدم chatmessage المحتوى لتحديد طريقة العرض؛ والقيمة المنطقية true يشير إلى «حدث نظام — النوع غير معروف».

membership يطابق تلميحات الشارات (فئات المشتركين). يحافظ التخزين المؤقت للصور الرمزية على chatimg صالحاً بين الأحداث؛ إذا أخفى DOM لون المشرفين، يمسح النص البرمجي nameColor. تضبط صفوف هدايا TikFinity أيضاً contentimg إلى أيقونة الهدية عند توفرها. تتضمن تحديثات سلاسل الهدايا في DOM الأصلي وTikFinity meta.tiktokGiftStreakId, meta.tiktokGiftCount، و meta.tiktokGiftQuietMs كي تتمكن التراكبات من دمج التحديثات المتكررة؛ معرّفات السلاسل القديمة فريدة لكل نسخة صفحة. قد تتضمن بيانات الهدايا الوصفية أيضاً tiktokGiftMessageId (معرّف رسالة TikTok الأصلي)، tiktokGiftSenderId, groupId, giftId, giftName, streakable، و repeatEnd. تعرّف المعرّفات الأصلية الهدية نفسها عبر نوافذ الالتقاط؛ ويعرّف معرّف مجموعة غير صفري مع معرّفي المرسل والهدية تحديثات السلسلة التراكمية. يوفر التقاط SSApp عبر WebSocket الحقول نفسها بعد استقرار السلسلة، مع count محفوظاً للتوافق. يُفحص مفتاح التبرعات الخاص به عند تمرير كل هدية: يؤدي تعطيل تبرعات TikTok إلى إزالة hasDonation و donoValue مع الاحتفاظ بحدث الهدية وبياناته الوصفية. يستخدم تحويل النص إلى كلام هذه الهويات لدمج التحديثات وحجب النسخ المكتملة المكررة لمدة تصل إلى عشر دقائق (ذاكرة مؤقتة محدودة)، ويقرأ هدايا TikTok كاسم المرسل والكمية واسم الهدية. تعود البيانات الأقدم إلى معرّفات السلسلة ونص الرسالة الموجودة لديها؛ ولا تُستنتج الهوية من نص الهدية وحده. يستخدم نطق هدايا TikTok لغة تحويل النص إلى كلام أو الصوت المحددة، بصورة مستقلة عن لغة الواجهة. تُترجم أفعال الإعلان للإنجليزية والإسبانية والبرتغالية والفرنسية والألمانية والإيطالية والهولندية؛ وتستخدم اللغات الأخرى المرسل والكمية واسم الهدية دون فعل إنجليزي. يحتفظ تحويل النص إلى كلام المبسّط بهذا التنسيق المحايد. تبقى أسماء الهدايا كما توفرها المنصة؛ ولا يترجم هذا كتالوجات الهدايا أو رسائل الدردشة تلقائياً، ولا يستنتج لغة البث.

لتحديثات السلسلة هذه، يكون العدد وتسمية التبرع تراكميين: 1 و2 و3 تعني ثلاث هدايا، وليس ستاً. ينبغي لمستهلكي الإجماليات إضافة الزيادة فقط فوق أكبر مبلغ سبق رصده لمعرّف السلسلة. يدعم الالتقاط القياسي فئات الهدايا القديمة وصفوف الصور والأعداد الحالية؛ ويحتفظ كلاهما بـ event: "gift" و hasDonation. تحتفظ الأسعار المجهولة بعدد الهدايا وأسمائها للعرض، وتستخدم تقديراً بالدولار الأمريكي يعادل عملة واحدة لكل هدية. يتقدم الحقل الذي يوفره المصدر donoValue يحظى بالأولوية؛ وقد توفر بيانات الهدايا المعروضة coinsPerGift أو diamondsPerGift قبل الحاجة إلى جدول الهدايا أو القيمة الافتراضية. تستخدم تقديرات العملات في Standard/TikFinity وتقديرات الماس في الوضع الأصلي لـ SSApp تحويلاتها المختلفة الحالية؛ ولا يمثل أي منها دفعة نقدية مضمونة.

Whatnot

التنفيذ: sources/whatnot.js

  • افتح صفحة برنامج Whatnot المباشر مع ظهور الدردشة؛ يوفر التقاط WebSocket الموجود الدردشة وإشعارات المزاد والبيع وفشل الدفع والغارات والتبرعات وتحديثات المشاهدين السريعة. لا تزال لقطات المنتجات والسحوبات تعتمد على أقسام DOM المعروضة في واجهة البرنامج.
  • التقاط أحداث البث (Capture Stream Events) يتحكم في أحداث نظام Whatnot وتحديثات بيانات المزاد والكتالوج الوصفية؛ وتتطلب صفوف الانضمام أيضاً التقاط أحداث الانضمام «joined» إلى البث؛ تظل أعداد المشاهدين تتبع مفاتيح عدد المشاهدين والحماس.
الحدث متى يُشغّل ملاحظات البيانات
viewer_update تغييرات عدد المشاهدين من تحديثات البث المباشر عبر WebSocket، مع استطلاع DOM كبديل. meta عدد صحيح للمشاهدين.
donation أحداث تبرعات Whatnot ومساهمات تعزيز المجتمع عبر WebSocket. hasDonation يتضمن المبلغ المنسق؛ ويبقى السياق الخاص بـ WebSocket ضمن meta.
raid أحداث غارات Whatnot عبر WebSocket، بما في ذلك ردود النشاط المؤجلة. meta.numRaiders يُدرج عندما يوفره Whatnot.
joined صفوف الدردشة التي يبدأ نصها الموحّد بـ joined، عندما التقاط أحداث الانضمام «joined» إلى البث مفعّل. يستخدم تسميات أحداث نصية لإشعارات الانضمام (وليس قيمة منطقية true).
auction_update عندما تتغير حالة المزاد في التذييل المباشر (نص الفائز أو المتصدر، أو العنوان، أو المزايدات، أو السعر، أو المؤقت، أو حالة البيع)، وغالباً ما تسرّعها حزم دورة حياة المزاد عبر WebSocket. حدث ببيانات وصفية فقط. دون chatname/chatmessage؛ توجد البيانات في meta (على سبيل المثال meta.title, meta.bids, meta.price, meta.timer, meta.status).
commerce_update عندما تتغير أقسام الكتالوج (المنتجات وSurprise Sets والسحوبات القادمة)، وغالباً ما تسرّعها حزم دورة حياة السحوبات أو المنتجات عبر WebSocket. لقطة ببيانات وصفية فقط مع أعداد الأقسام ومصفوفات العناصر ضمن meta.products, meta.surpriseSets، و meta.upcomingGiveaways.
auction_started, new_bid, auction_ended, product_sold يصل إشعار WebSocket المباشر المقابل. هذه أحداث فردية، منفصلة عن لقطات العرض الموجودة. platform/type: "whatnot"، والنص العادي chatname, userid عند توفره، واسم المنتج في subtitle، وحقل نص عادي chatmessage مع textonly: true. توجد المعرّفات المتاحة وتفاصيل المزاد ضمن meta: productId, auctionId, orderId, transactionId, livestreamId, bidId, bids, auctionEndTime، و status. الحقل الاختياري price بوحدات العملة الرئيسية، مع priceText و currency عند توفيره.
payment_failed يصل إشعار WebSocket مباشر بفشل الدفع. حقول المشتري والمنتج والمعرّفات المتاحة نفسها، مع meta.paymentStatus: "failed". عندما يكون فقط product.purchaserUserId يحدد المشتري، فإنه يملأ userid في أحداث البيع أو الدفع، ويظل اسم المشتري فارغاً. لا يُستنتج مشتري من مزاد مختلف أو سابق.
payment_succeeded يصل إشعار WebSocket مباشر بنجاح الدفع. meta.paymentStatus: "succeeded"، مع المشتري والعنصر ومعرّف الطلب والحقول المسموح بها الأخرى التي يوفرها ذلك الإشعار. يظل هذا حدث دفع منفصلاً؛ ولا يصدر حدثاً آخر من نوع purchase أو تبرع. تبقى الحقول المفقودة فارغة أو محذوفة، حتى إذا وفرتها عملية بيع سابقة.

تظل تحديثات عرض المزاد والتجارة لقطات مستندة إلى DOM. لمطابقة حدث WebSocket منفرد في Event Flow، استخدم نوع الحدث (متقدم) (Event Type (Advanced))، اختر حدث مخصص، وأدخل اسمه المطابق تماماً. يمكن أن تستخدم التسميات **{username}**\n{subtitle} مع وزن النص المحدد؛ ويمكن للشروط مقارنة meta.paymentStatus مع failed. إن مثال تسمية Whatnot قابل للاستيراد متاح. تظل إعدادات التقاط أحداث البث الحالية سارية.

الحقول الاختيارية الإضافية هي meta.catalogProductId (حقل الحزمة product.productId), meta.parentProductId (product.parentId), meta.transactionType (نوع البيع في Whatnot، دون تغيير)، و meta.placeOrderErrorReason (رمز خطأ الطلب أو الدفع الذي يوفره Whatnot). تصف مراجع المنتجات هذه الكتالوج أو القائمة الأصلية؛ ولا تستبدل معرّف الطلب. لا تُعامل كمية المخزون ككمية مشتراة.

لأتمتة نجاح الدفع، اضبط نوع الحدث (متقدم) (Event Type (Advanced)) كمشغّل إلى حدث مخصص: payment_succeeded، وصفِّ المصدر إلى Whatnot. يمكن للشروط والقوالب الموجودة استخدام حقل ذلك الحدث userid, chatname, subtitle و meta.orderId مباشرةً. لا يلزم شراء محفوظ سابقاً عندما يحتوي الإشعار التفاصيل المطلوبة.

انتهاء المزاد أو تعليم العنصر كمباع لا يؤكد نجاح الدفع: لا تصدر هذه الإشعارات كأحداث مدفوعة من نوع purchase كأحداث ولا تضبط مبالغ التبرعات. لا يُصدر حدث نجاح إلا عند استقبال payment_succeeded كإشعار؛ لا يستطلع الالتقاط اكتمال الدفع ولا يستنتجه من عملية بيع. الأحداث الأخرى من نوع paymentStatus لا تُمرر القيم إلا عند توفيرها صراحةً في حزمة ملتقطة. تُحذف المعرّفات المفقودة؛ وقد يشمل معرّف منتج وحده عدة مبيعات، لذا استخدم معرّف طلب أو مزاد مقدماً لربط الإشعارات. لا يتذكر الالتقاط المشتريات ولا يطابق تحديثات الدفع؛ يجب ضبط أي سير عمل كهذا صراحةً في Event Flow. تُحجب الحزم المكررة المتقاربة من جسري الالتقاط الحاليين. لا تُمرر كائنات الطلبات أو المدفوعات الخام.

eBay Live

يتطلب اتصال بائع eBay في قسم تحقيق الدخل خدمة SSN eBay مضبوطة وموافقة البائع عبر OAuth؛ والتقاط eBay Live أدناه مستقل عنه. يستخدم وضع البيئة التجريبية روابط قوائم تجريبية، ويسمي المشتري "eBay Sandbox buyer"، ويبدأ الرسالة بـ "Sandbox test purchase:". تحتفظ المشتريات التجريبية بعقد الشراء نفسه، ويمكنها تشغيل التنبيهات وإجراءات الدردشة المفعّلة أثناء الاختبار. يصدر عقد الدفع المنفّذ فيه event: "purchase"، مع type و platform مضبوطاً على ebay. يتطلب طلباً مدفوعاً يطابق منتجاً محدداً. id معرّف ثابت معتم لبند طلب؛ chatname هو "eBay buyer"، chatmessage نص عادي (textonly: true), subtitle هو اسم المنتج والحقل الاختياري contentimg هو صورته. meta.ebayPurchase يتضمن itemId, itemName, quantity، والحقل العام url. لا تتضمن هوية المشتري أو بيانات الشحن أو hasDonation أو donoValue يُدرج. يختلف هذا عن تحديثات المزاد أو المخزون المستخرجة، التي لا تثبت الدفع.

التنفيذ: sources/ebay.js

  • افتح إما /ebaylive/events/<id>/chat أو /ebaylive/events/<id>/stream. يتلقى كلاهما خلاصة المزاد المباشرة نفسها.
  • توفر خلاصة WebSocket العامة المزادات والمزايدات والفائزين وتمديدات الوقت وتغييرات المخزون؛ ويوفر استعلام GraphQL للقراءة فقط تفاصيل القوائم. يظل التقاط DOM بديلاً عند عدم توفر بيانات الشبكة.
  • التقاط أحداث البث (Capture Stream Events) يتحكم في لقطات البيانات الوصفية (auction_update, commerce_update)؛ وتظل عدادات المشاهدين تحترم مفاتيح عدد المشاهدين والحماس.
الحدث متى يُشغّل ملاحظات البيانات
viewer_update عندما يتغير عدد مشاهدي الحدث النشط (عدد الترويسة، أو مؤشر الحدث المباشر كبديل). meta عدد صحيح للمشاهدين.
follower_update عندما تُرجع نقطة نهاية إحصاءات البائع عدد متابعيه. meta عدد صحيح للمتابعين. يستطلع المصدر نقطة نهاية البائع كل 60 ثانية؛ وقد تظل نقطة النهاية تعيد قيمة مخزنة مؤقتاً لمدة تصل إلى 5 دقائق.
auction_update عندما تتغير البيانات الوصفية للمزاد النشط. حدث ببيانات وصفية فقط. يضبط التقاط الشبكة meta.sourceMode إلى network ويوفر title وprice وbidder وwinner وbids وtimer وendingAt. meta.ebay يتضمن eventId وlistingId وسجل القائمة من GraphQL ‏(listing)، وقائمة المقبس العامة الحالية (eventListing)، وآخر تحديث للمزاد (update). تحافظ هذه على الفئة والصور والعملات والكميات وتفاصيل فتح صناديق البطاقات ونتائج المزاد وحقول التوقيت دون تسطيح تفاصيل المنصة وفقدانها. سجل GraphQL لقطة مجلوبة؛ وتحمل قائمة المقبس وتحديثه حالة مباشرة أحدث. يُدمج سجل البداية أو إعادة الاتصال في اللقطة الحالية بدلاً من إصداره كعمليات فوز قديمة. تؤدي إزالة جميع القوائم المعروضة إلى إصدار status: "idle" مع cardCount: 0 لمسح المزاد. يحتفظ بديل DOM بحقول بطاقة المشغّل أو معاينة الحدث.
commerce_update عندما تتغير أقسام لقطات الكتالوج أو الأحداث المباشرة. لقطة ببيانات وصفية فقط ضمن meta. يتضمن وضع الشبكة eventId, navigation.viewerCount و playerCards للقوائم المعروضة حالياً، ولكل منها البنية المفصلة نفسها ebay ككائن للقطة مزاد. تمسح قائمة بطاقات فارغة القوائم المُزالة. قد يتضمن بديل DOM أيضاً liveEvents, livePreview, currentEvent و upcomingEvents.
reaction عندما يعرض eBay Live حركة قلب أو تفاعل. يُرسل مباشرةً إلى هدف التفاعلات المخصص. meta.reactionType هي heart؛ لا يكشف eBay اسماً لكل مستخدم لهذه الحركات في DOM.

تحذف أحداث بيانات eBay الوصفية عمداً chatname/chatmessage؛ ينبغي للتراكبات المستهلكة العرض انطلاقاً من data.event + data.meta فقط.

Kick — التقاط DOM القياسي

التنفيذ: sources/kick.js

  • يحتاج إلى جلسة مصادَق عليها للحصول على صور الملفات الشخصية وشارات المشتركين.
  • اكتشاف محدود للأحداث عبر مطابقة نص الدردشة والشارات؛ تظل أعداد المشاهدين تعمل عند تفعيل المفتاح.
الحدث متى يُشغّل ملاحظات البيانات
gift هدايا KICKs المكتشفة عبر صورة الملصق ومبلغ عملة Kick الظاهر. hasDonation يحمل N KICKs (1 KICK لهدية واحدة) عندما يكون المبلغ الظاهر متاحاً؛ contentimg يحمل صورة الهدية. يُحفظ نص الرسالة الموجود.
reward استبدالات المكافآت («قام باستبدال…»). chatmessage يتضمن نص الاستبدال.
true (قيمة منطقية) إشعارات نظام عامة لا تطابق أنماط الهدايا أو المكافآت. استخدم chatmessage المحتوى لتحديد طريقة العرض؛ والقيمة المنطقية true يشير إلى «حدث نظام — النوع غير معروف».
viewer_update يستطلع واجهة API لقناة Kick كل 30 ثانية (فقط عند تفعيل إحصاءات المشاهدين). meta عدد صحيح للمشاهدين؛ للاشتراكات والمتابعات والتبرعات، استخدم جسر Kick أدناه.

Kick — WebSocket/الجسر

التنفيذ: sources/websocket/kick.js مع أدوات مساعدة مشتركة ضمن providers/kick/core.js

  • OAuth عبر جسر Social Stream Kick. النطاقات الحالية هي user:read, channel:read, channel:write, channel:rewards:read, chat:write, events:subscribe, moderation:ban, moderation:chat_message:manage، و kicks:read. تُجدد الرموز تلقائياً.
  • قد يستغرق تجهيز Webhook في Kick عدة دقائق؛ تعرض الواجهة الاشتراكات النشطة لكل قناة.
الحدث متى يُشغّل ملاحظات البيانات
message بيانات الدردشة عبر الجسر. meta.plainText يتضمن الرسالة بنص عادي (قد لا يزال يحتوي على رموز تعبيرية)؛ وتدمج الشارات المنصة وذاكرة الملف الشخصي المؤقتة. تملأ ردود سلاسل المحادثات initial, reply، و meta.reply عند توفر تفاصيل الرد أو الرسالة الأصلية المخزنة مؤقتاً.
reward channel.reward.redemption.updated، إضافةً إلى بيانات الدردشة والنظام عبر الجسر التي تبدو كعمليات استبدال. meta يتضمن معرّف المكافأة أو الاستبدال والعنوان والتكلفة والحالة وإدخال المستخدم ومن استبدل المكافأة.
new_subscriber channel.subscription.new. membership مسند إلى دور المشترك؛ meta يتضمن { subscriber, plan }.
resub channel.subscription.renewal. meta.duration (أشهر) و meta.plan متاح؛ subtitle يلخص السلسلة.
subscription_gift channel.subscription.gifts. meta.totalGifted, meta.gifter؛ تستخدم الشارات أيقونة 💝 كبديل.
donation أحداث الدعم / التبرع المكتشفة باستدلالات نوع الحدث؛ تستخدم هدايا KICKs gift أدناه. hasDonation يحمل المبلغ المنسق؛ meta يتضمن { amount, currency, supporter, message, giftName }.
gift kicks.gifted (هدايا KICKs)، بما يطابق مستخرج DOM. hasDonation يحمل N KICKs (1 KICK لهدية واحدة)؛ contentimg يحمل صورة الهدية عند توفرها. تبقى تفاصيل الهدية المنظمة ضمن meta.
raid معالجة توافق لبيانات المقبس القديمة التي تتخذ بنية الاستضافة مثل App\Events\StreamHostEvent. لا يتضمن كتالوج أحداث Kick الرسمي الحالي اشتراكاً للغارات أو الاستضافة. إذا وصلت بيانات قديمة متوافقة، فتُعيّن إلى الحدث القياسي raid؛ لا تعتمد على هذا لسير عمل Kick الحالي.
new_follower channel.followed. تُستمد أيقونات المتابعين من ذاكرة الملفات الشخصية المؤقتة؛ follower_update يُشغّل عندما يوفر Kick إجماليات متواصلة.
follower_update يوفر الجسر أعداد المتابعين في بيانات Webhook. meta إجمالي بعدد صحيح؛ تستخدمه لوحات المعلومات لأهداف المتابعين.
stream_online / stream_offline livestream.status.updated. meta يتضمن جسم الحالة الخام من Kick ‏(is_live وtitle وغيرها).
viewer_update livestream.status.updated عندما يتضمن Kick إجماليات المشاهدين المتزامنين. meta عدد صحيح للمشاهدين؛ يصدر 0 عند حالة عدم الاتصال لمسح العدادات القديمة.
user_banned moderation.banned من الجسر أو Webhook، أو أحداث الحظر في مقبس دردشة Kick. حدث ببيانات وصفية فقط لأدوات الإشراف. meta يتضمن اسم المستخدم أو العرض ومعرّف المستخدم ورابط الصورة الرمزية أو الملف الشخصي والمشرف والسبب ومدة الحظر أو الإيقاف المؤقت وما إذا كان دائماً.

تستخدم عمليات البحث عن الملفات الشخصية profileCache; mapBadges يدمج أصول شارات Kick مع SVG المخزّن مؤقتاً عند توفره. عندما يبلغ Kick عن تبرعات بوحدة KICKs، يحوّلها الجسر إلى hasDonation إضافةً إلى meta.amount مع currency يعود إلى «KICKs». تتضمن بيانات الدردشة meta.messageId عندما يتيح الجسر معرّف رسالة Kick أصلياً كي تستهدف مزامنة الحذف الرسالة الصحيحة. تتضمن بيانات الردود meta.reply مع الحقل الأصلي messageId, author، و text عند معرفته. تبقى تفاصيل الرد المقدمة متاحة حتى عند عدم تخزين الرسالة الأصلية مؤقتاً؛ وقد يظل الرد الذي يحمل معرّفاً فقط دون سياق مخزن بلا اقتباس ظاهر.

Kick WebSocket: مرجع سريع للأحداث

data.event السيناريو
new_followerتابع مستخدم القناة
new_subscriberاشتراك جديد
resubتجديد الاشتراك
subscription_giftاشتراكات مُهداة
rewardاستبدال مكافأة قناة أو رسالة دردشة أو نظام على هيئة مكافأة
donationحدث تبرع / دعم
giftحدث هدية KICKs
raidمدخل استضافة أو غارة قديم للتوافق فقط؛ وليس اشتراك Kick رسمياً حالياً
follower_updateإجمالي المتابعين
stream_onlineبدأ البث المباشر
stream_offlineانتهى البث
user_bannedحُظر مستخدم أو أُوقف مؤقتاً

VPZone — WebSocket

التنفيذ: sources/websocket/vpzone.js

  • يتصل بـ wss://chat.vpzone.tv/ws?channel=USERNAME؛ يطلب OAuth profile:read, chat:read, chat:write, channel:read, channel:write، و chat:moderate. يمكن أيضاً توفير رمز Bearer يدوياً.
  • إطارات VPZone المسطحة مثل type: "msg" تُحوّل إلى بيانات دردشة قياسية.
  • على جانب المنصة delete_message / clear_chat تزيل الإطارات الصفوف المطابقة من لوحة الإرساء؛ وتزامن مفاتيح اختيارية عمليات الحذف والحظر من لوحة الإرساء إلى VPZone (لمالك القناة فقط).
  • يحصل مالكو القنوات على لوحة معلومات البث (Stream Info) داخل الصفحة لتحديث عنوان البث المباشر وفئته (بالنمط نفسه المستخدم في صفحة مصدر Twitch).
الحدث متى يُشغّل ملاحظات البيانات
message VPZone msg, message, new_message، أو chat_message كإطار WebSocket. chatname يأتي من username; chatmessage يأتي من body؛ تُنسخ علامات المشترك والمالك والمشرف وVIP إلى chatbadges، وعلامات الأدوار في المستوى الأعلى، و meta. تملأ المعرّفات الأصلية data.id و meta.messageId.
viewer_update VPZone presence كإطار مع count أو حقل مشاهدين مكافئ. meta هو عدد المشاهدين المباشرين الصحيح؛ ويسهم في الإجمالي المجمع viewer_updates.
new_subscriber VPZone subscribe / subscription كإطار. membership يُضبط على Subscriber عند وجود علامات الاشتراك.
subscription_gift VPZone gift / gift_subscription كإطار. يستخدم اسم حدث الاشتراك المُهدى نفسه مثل Twitch وKick وRumble وVelora. subtitle يحمل عدد الهدايا (x5) أو المستلِم.
message + hasDonation VPZone system كإطار مع metadata.kind: "pixels_cheer" (تبرع Pixels). صف دردشة يتضمن تبرعاً؛ hasDonation هو تسمية المبلغ (مثل 100 Pixels), meta.pixels العدد الصحيح. event يبقى فارغاً؛ اكتشف هذا التبرع من hasDonation. تستخدم أحداث الدعم عبر جسر Kick بدلاً من ذلك event: "donation".
message كردود VPZone msg كإطار يحمل metadata.reply_to (معرّف الرسالة والمؤلف ومقتطف — بيانات مكررة لتسهيل الوصول على الخادم). تُعرض مثل ردود Kick: initial يحتوي على تسمية «المؤلف: مقتطف»، reply نص الرد الخام، meta.reply الهدف المنظم. يحترم استبعاد «الرد على» كإعداد.
raid VPZone raid كإطار مع metadata.kind: "incoming". تُتخطى إطارات الغارات الصادرة؛ meta.viewers يحمل حجم الغارة عند توفره.
shoutout VPZone shoutout كإطار (!so كأمر). meta.targetUser يسمي القناة التي تلقت الإشادة.
reward VPZone system كإطار مع metadata.kind: "channel_points_redeem". استبدال نقاط القناة، باستخدام اسم الحدث نفسه لمكافآت Twitch.
stream_online / stream_offline VPZone system كإطارات مع metadata.kind: "stream_started" / "stream_ended". يُنسب إلى اسم القناة (لا تتضمن الإطارات فاعلاً).
new_follower VPZone follow كإطار. يُعيّن إلى بنية حدث المتابعة القياسية.
joined أحداث WebSocket بنمط الانضمام أو الحضور في VPZone، عندما التقاط أحداث الانضمام «joined» إلى البث مفعّل. يُعيّن إلى حدث نظام بنمط الدردشة مع بيانات فاعل VPZone الوصفية ضمن meta.

Joystick

التنفيذات: sources/joystick.js, sources/inject/joystick-ws.js، و sources/websocket/joystick.js

  • يعمل مصدر موقع Joystick 2.0 العادي على صفحة مسجّل الدخول /u/<channel>/chat كصفحة. يقرأ حقل الصفحة ChatChannel, WhisperChatChannel, EventLogChannel، و SystemEventChannel إطارات Action Cable، مع الرجوع إلى الصفوف المعروضة في حالات Electron وإعادة الاتصال.
  • تستخدم رسائل الموقع حقول الدردشة الأساسية نفسها مثل YouTube وTwitch وKick: الحقل الأصلي id, chatname, chatmessage, chatimg, chatbadges, nameColor, membership, mod, private, username/userid، و timestamp عندما يوفرها Joystick. عندما يغفل المقبس لون اسم المستخدم، يوفر الصف المعروض القيمة نفسها لـ nameColor كحقل تستخدمه لوحات الإرساء التي تفعّل الألوان.
  • تستبدل تعديلات الرسائل على الموقع الصف المطابق في لوحة الإرساء؛ وتزيل عمليات الحذف والكتم والحظر الصفوف المطابقة باستخدام المعرّف الأصلي أو اسم المستخدم.
  • يستخدم مصدر WebSocket المنفصل بيانات اعتماد روبوت Joystick ‏(client_id + client_secret)؛ يستخدم مصدر الموقع جلسة الصفحة التي سُجّل الدخول إليها.
  • يصادق عبر https://joystick.tv/api/oauth/authorize، ثم يبادل الرموز أو يجددها على https://api.joystick.tv/api/oauth/token.
  • يتصل بـ wss://api.joystick.tv/cable ويشترك في GatewayChannel.
  • تُستخدم مبادلة رموز OAuth الاختيارية لنقاط نهاية مساعدة مثل https://api.joystick.tv/api/users/stream-settings.
  • لا يصدر مصدر بيانات اعتماد الروبوت المنفصل viewer_update. يصدر مصدر الموقع الذي سُجّل الدخول إليه أعداد المشاهدين عندما يوفرها مقبس الصفحة، كما هو موضح أدناه.
الحدث متى يُشغّل ملاحظات البيانات
message Joystick ChatMessage, BotMessage, new_message, bot_message, event_bot_message, pvp_message، والهمسات. لا تتضمن الدردشة العادية event. يوضع المعرّف الأصلي في حقل المستوى الأعلى id و meta.messageId؛ تستخدم الأدوار والحالة الخاصة حقول المستوى الأعلى والشارات المعتمدة.
new_follower Joystick StreamEvent مع النوع Followed. يستخدم بنية المتابعة القياسية وتُزال تكراراته مع صف الروبوت المطابق في Joystick. الحقل الاختياري meta.userId/meta.followedAt لا تُدرج إلا عندما يوفرها Joystick.
new_subscriber / subscription_gift أنواع أحداث Joystick NewSubscription / GiftedSubscription. يستخدم مفاتيح بيانات الاشتراك الوصفية المتوافقة مع Kick: eventType, subscriber, gifter, totalGifted, duration، و plan.
donation Joystick StreamEvent كأنواع Tipped / TipMenu. hasDonation يحمل مبلغ الرموز ووحدتها للتحويل المشترك إلى الدولار الأمريكي عند توفره، وتُزال تكرارات صف روبوت Joystick المطابق. meta يستخدم مفاتيح أحداث دعم Kick المعتمدة: eventType, supporter, amount, currency, message, giftName, giftType، و tier.
stream_online / stream_offline Joystick StreamEvent كأنواع مثل Started, StreamResuming, Ended, StreamEnding. يُستخدم لأتمتة حالة الاتصال وعدم الاتصال التي تراعي وسيلة النقل.
user_enter / user_leave Joystick UserPresence كأنواع enter_stream / leave_stream. تُصدر إشعارات الحضور كرسائل أحداث ويمكن إخفاؤها بإعدادات إخفاء الأحداث. ويخفي هذا الخيار أيضاً أحداث البث غير المرتبطة بالتبرعات.
viewer_update يتلقى مصدر الموقع الذي سُجّل الدخول إليه ViewerCountUpdated عبر EventLogChannel. يستخدم عدداً صحيحاً عادياً في meta، بما يطابق YouTube وTwitch وKick. لا يُصدر إلا عند تفعيل التقاط عدد المشاهدين أو وضع الحماس. لا يزال مصدر بيانات اعتماد الروبوت المنفصل لا يتلقى أعداد المشاهدين.
follower_update / subscriber_update أحداث تحديث أعداد المتابعين والمشتركين في Joystick. يستخدم عدداً صحيحاً عادياً في meta، بما يطابق عقد عداد Twitch.
إشعارات داخلية متجاهلة ChatMessageReceived، وحالة الجهاز، وتحديثات الأدوات غير المعيّنة مثل حالة هدف التبرعات أو PvP أو subathon. هذه إشعارات نقل أو حالة صفحة، وليست أحداث Social Stream. ولا تُحوّل إلى أحداث مختلقة من نوع snake_case كأسماء أحداث؛ أما الحقل الحقيقي ChatChannel/new_message يبقى الصف هو بيانات الدردشة الوحيدة.

XP Sync

التنفيذ: sources/xpsync.js

  • تستخدم صفوف الدردشة حقول البيانات القياسية مع type: "xpsync"، بما في ذلك المؤلف والرسالة والصورة الرمزية وشارات الصور وSVG المضمنة ولون الاسم والعضوية وعلامات المشرف والعضو والروبوت، ومعرّف UUID الأصلي للرسالة كـ id عند توفره.
  • تتبع الردود قواعد مصادر DOM في YouTube وTwitch وKick: ما لم تُعطّل بادئات الرد، initial يتضمن المستخدم الذي يُرد عليه، reply يحافظ على الرسالة دون البادئة، و chatmessage يتلقى بادئة الرد الظاهرة.
  • تُلتقط الصفوف المميزة بـ Sparks رغم أن XPSync يعرضها دون فئة صف الدردشة العادية أو معرّف رسالة؛ ويُتاح المبلغ الظاهر عبر hasDonation كـ N Sparks.
  • عند تفعيل التقاط الأحداث، تصدر الصفوف التي تتضمن «just followed» أو «followed the channel» event: "new_follower".
  • عند تفعيل أعداد المشاهدين، تصدر لوحة الدردشة الدائمة event: "viewer_update" من عدد مشاهدات البث المباشر المحمّل مسبقاً في صفحة XPSync، ويحدّثه من تحديثات الصفحة المباشرة في XPSync. لا تلزم بيانات اعتماد SSN منفصلة.

Instagram — التقاط البث المباشر عبر REST وصندوق الأخبار

التنفيذ: sources/instagram.js و sources/instagramlive.js (نسخ متطابقة)

  • في صفحات البث المباشر (/<user>/live/?broadcast_id=...)، تأتي الدردشة المباشرة من واجهة الويب API الخاصة بـ Instagram، ويُستعلم عنها دورياً من الأصل نفسه باستخدام ملف تعريف ارتباط الجلسة: GET /api/v1/live/{broadcast_id}/get_comment/?last_comment_ts={ts} كل نحو ثانيتين، و POST /api/v1/live/{broadcast_id}/heartbeat_and_get_viewer_count/ كل نحو 5 ثوانٍ عند تفعيل أعداد المشاهدين. بعد 3 إخفاقات متتالية (أو عندما لا يوجد broadcast_id يمكن اكتشافه) يعود المصدر إلى تحليل DOM للدردشة المعروضة.
  • تُستطلع خلاصة نشاط الحساب نفسه عبر POST /api/v1/news/inbox/ كل نحو 45 ثانية على أي صفحة Instagram. لا يفعل الاستطلاع الأول إلا تهيئة مجموعة إزالة التكرار، فلا تُعاد المحفوظات أبداً؛ وتُزال تكرارات الأخبار باستخدام tuuid.
  • ترويسات API المطلوبة (كلها ثابتة أو قابلة للاشتقاق): X-IG-App-ID: 936619743392459, X-CSRFToken (من ملف تعريف الارتباط)، X-ASBD-ID: 359341, X-Requested-With: XMLHttpRequest, Content-Type: application/x-www-form-urlencoded.
  • تستخدم جميع أحداث خلاصة النشاط type: "instagram"؛ تبقى الدردشة المباشرة type: "instagramlive". تستخدم أحداث الإعجاب مسار الخلفية العادي: ترسل الخلفية نسخة واحدة إلى تراكب التفاعلات المخصص، ثم تضمها إلى خلاصة الدردشة والأحداث الرئيسية فقط عندما capturelikeevent مفعّل، بما يطابق TikTok وMeetMe. hideevents ومرشح الأحداث المخصص يحظرانها في كل مكان. لأن أحداث صندوق الوارد تخص الحساب المسجّل دخوله، فإنها تُحجب أثناء مشاهدة بث شخص آخر (كلا /<user>/live/ كصفحات والبثوث داخل عارض القصص؛ تُحدد الملكية لكل ملف شخصي وتُعاد المحاولة بعد إخفاقات البحث) وتُصدر في بثك المباشر وجميع الصفحات غير المباشرة. تستطلع علامة تبويب Instagram نشطة واحدة صندوق وارد الحساب في كل مرة، ولا يعمل الاستطلاع إلا عند تسجيل الدخول.
الحدث متى يُشغّل ملاحظات البيانات
message (مباشر) إدخالات جديدة في get_comment كاستجابة (comments[]/system_comments[])، أو صفوف دردشة DOM الجديدة عندما لا يتوفر REST. بيانات دردشة قياسية، type: "instagramlive". يوفر REST القيمة الدقيقة لـ user.username, user.profile_pic_url، وحقل فريد pk مستخدماً لإزالة التكرار.
viewer_update heartbeat_and_get_viewer_count يبلغ عن قيمة متغيرة لـ viewer_count، عند تفعيل التقاط عدد المشاهدين أو وضع الحماس. meta عدد صحيح للمشاهدين. يتوقف الاستطلاع عندما broadcast_status لم يعد "live".
stream_online / stream_offline stream_online يُشغّل مرة واحدة عند بدء جلسة بث REST؛ stream_offline يُشغّل عندما يبلغ نبض الاتصال عن حالة غير مباشرة في broadcast_status (يتطلب التقاط عدد المشاهدين أو وضع الحماس). أحداث ببيانات وصفية فقط تطابق مفردات حالة البث المشتركة المستخدمة في Twitch وJoystick.
new_follower خبر في صندوق الأخبار يحمل نوع متابعة في notif_name (أو story_type 12) يظهر. chatname هو المتابع الجديد، chatimg صورة ملفهم الشخصي، chatmessage نص صندوق الوارد (مثل «بدأ x متابعتك.»).
follow_request إن private_user_follow_request يظهر كخبر (تتلقى الحسابات الخاصة طلبات بدلاً من متابعات مباشرة). البنية نفسها مثل new_follower، مع إبقاء التمييز بينها كي تتمكن الأتمتة من الموافقة على الطلبات أو الترحيب بشكل مختلف.
liked خبر في صندوق الأخبار يحمل نوع إعجاب في notif_name (بما في ذلك comment_like) يظهر. مفردات إعجاب مشتركة مع TikTok/MeetMe. chatname هو الفاعل، chatmessage نص صندوق الوارد (مثل «أعجب x بصورتك.»).
message (تعليق على منشورك) خبر في صندوق الأخبار يحمل نوع تعليق في notif_name يظهر. صف دردشة عادي (event: false), type: "instagram"; chatmessage يحمل نص صندوق الوارد بما فيه مقتطف التعليق.
notification أي نوع آخر من أخبار صندوق الأخبار (الإشارات والوسوم والتسوق وغيرها). نوع عام شامل؛ meta.notifName و meta.storyType تحافظ على تصنيف الخبر الخام.

Facebook Live

التنفيذ: sources/facebook.js (استخراج DOM) وجسر Graph API اختياري على sources/websocket/facebook.html

  • يقرأ التقاط DOM تعليقات Facebook المعروضة؛ ويقرأ جسر Graph API للصفحات المُدارة تعليقات الفيديو. يستخدم كلاهما type: "facebook"، وحقول الدردشة القياسية، ودون event للتعليقات العادية. يتضمن جسر API أيضاً الحقل الاختياري platform: "facebook".
  • يستخدم جسر API userid لمعرّف المؤلف عند توفره، timestamp لوقت إنشاء صالح بمللي ثانية Unix، و contentimg لصورة مرفق HTTP(S) توفرها API. قد يكون حقل التعليقات التي تتضمن صورة فقط فارغاً chatmessage. textonly ينطبق على نص الرسالة فقط: نص خام عندما تكون true، وHTML مهرب المحارف عندما تكون false.
  • يستخدم سياق التعليقات عبر API meta.messageId (معرّف التعليق الأصلي)، meta.permalink, meta.videoId، و meta.pageId. استخدمت إصدارات API السابقة meta.commentId، وحقول المؤلف والوقت المكررة ضمن meta، ومرّر المرفقات الخام هناك. تستخدم الإصدارات الجديدة حقول المؤلف والوقت والوسائط القياسية بدلاً من ذلك؛ ولا يضيف هذا دعم مزامنة الحذف.
  • لا تُحدّث أعداد المشاهدين إلا عند تفعيلها. يقرأ جسر API العدد المتزامن live_views؛ لا يستبدله بمشاهدات الفيديو التراكمية أو يختلق صفراً لعدد غير متاح. لا يستنتج التقاط API النجوم أو العضويات أو الإبرازات أو الردود من نص تعليق عادي.
  • تُلتقط النجوم من DOM للدردشة المباشرة المعروضة عندما يُظهر Facebook العنصر المرئي N sent كعلامة؛ وتملأ hasDonation و donoValue بسعر 100 نجمة = $1 USD دون ضبط data.event.
  • للاختبار، أضف ssnreplay=1 إلى رابط Facebook Live لمعالجة صفوف الدردشة الظاهرة مسبقاً بعد التحديث.
الحدث متى يُشغّل ملاحظات البيانات
viewer_update يستطلع DOM شارة المشاهدين المباشرين؛ ويستطلع جسر API المشاهدات المباشرة المتزامنة عند تفعيله. meta عدد صحيح للمشاهدين، بما يطابق المصادر الأخرى. تُتخطى الأعداد المفقودة أو غير القابلة للتحليل؛ والصفر الفعلي صالح.
hasDonation نجوم Facebook المعروضة في DOM للدردشة المباشرة. بيانات دردشة قياسية؛ hasDonation يحمل مبلغ Stars الظاهر، مثل 100 Stars، و donoValue يحمل القيمة بالدولار الأمريكي. لا تضبط النجوم data.event.
highlightColor يعرض Facebook عنصراً ظاهراً HIGHLIGHTED كتسمية. يستخدم حقول الدردشة العادية و highlightColor؛ دون data.event يُضبط. تظل النجوم تستخدم hasDonation.

Online Church

التنفيذ: sources/onlinechurch.js

  • يعتمد على استخراج DOM من الدردشة العامة وترويسة الوسائط.
  • لا تُحدّث أعداد المشاهدين إلا عندما عرض عدد المشاهدين أو كان وضع الحماس مفعّلاً.
الحدث متى يُشغّل ملاحظات البيانات
message تظهر إدخالات جديدة ضمن #publicchat. بيانات دردشة قياسية مع اسم المرسل وصورته الرمزية وشاراته وتسمية عضوية اختيارية عند وجودها في DOM.
viewer_update يستطلع شارة الحضور المباشر في ترويسة الوسائط كل 10 ثوانٍ. meta عدد صحيح للمشاهدين؛ يرسل 0 عندما تكون الشارة مفقودة أو غير قابلة للقراءة لمسح العدادات القديمة.

SharePlay.tv

التنفيذ: sources/shareplay.js

  • يعتمد على استخراج DOM من درج الدردشة المباشرة في صفحات قنوات SharePlay.
  • لا تُصدر بعد ربط المستخرج إلا صفوف الدردشة والبطاقات المضافة حديثاً؛ وتُتجاهل المحفوظات الموجودة عمداً.
الحدث متى يُشغّل ملاحظات البيانات
message تظهر صفوف دردشة جديدة داخل خلاصة الدردشة الرئيسية. بيانات دردشة قياسية مع المؤلف والصورة الرمزية وصور الشارات والتعبيرات المحفوظة بتنسيق HTML. تملأ ردود سلاسل المحادثات أيضاً initial, reply، و meta.reply عندما لا يزال الصف الأصلي موجوداً.
raid يضيف SharePlay بطاقة Blitz إلى خلاصة الدردشة المباشرة. يُعيّن إلى حدث الغارة القياسي. meta.cardType هي "blitz"، مع حقل اختياري meta.fromLogin و meta.viewers عندما يكشف نص البطاقة عنها.
shoutout يضيف SharePlay بطاقة إشادة أو متابعة إلى خلاصة الدردشة. يُصدر كـ data.event = "shoutout". تُمرر صورة لافتة البطاقة عبر contentimg، بينما meta.cardType و meta.action تحافظ على تسمية البطاقة أو نص الزر.
viewer_update يستطلع شارة المشاهدين الظاهرة في الترويسة كل 10 ثوانٍ. meta عدد صحيح للمشاهدين؛ لا يُصدر إلا عندما عرض عدد المشاهدين أو كان وضع الحماس مفعّلاً، ويرسل 0 إذا أصبحت الشارة غير قابلة للقراءة، لمسح العدادات القديمة.

Streamplace

التنفيذ: sources/streamplace.js

  • يقرأ صفحة Streamplace المباشرة المعروضة باستخدام React ويتخطى سجل الدردشة الظاهر عند الربط.
  • رسائل بنمط التمرير مثل Name (Discord): message تُوحّد إلى اسم المرسل المُمرر.
الحدث متى يُشغّل ملاحظات البيانات
message تظهر صفوف دردشة Streamplace الجديدة بعد الربط. بيانات دردشة قياسية مع nameColor, chatbadges، والروابط المحفوظة بتنسيق HTML، وحقول الرد initial, reply، و meta.reply عند ظهوره.
viewer_update تتغير شارة المشاهدين في الترويسة عند تفعيل التقاط عدد المشاهدين أو وضع الحماس. meta عدد صحيح للمشاهدين.

WorldsWave

التنفيذ: sources/worldswave.js

  • يدعم صفحات WorldsWave المباشرة وروابط الدردشة فقط مثل https://worldswave.com/kn_livecmd.php?cmd=viewStream&streamId=STREAM_ID&chatonly=1.
  • يستخدم الحقل الثابت data-ww-*/ww-chat-* كبنية عرض عند توفرها، مع الاحتفاظ بمحددات kontackt القديمة لصفحات الدردشة فقط والتخطيطات الأقدم.
  • يُتخطى سجل الدردشة الموجود عند ربط الالتقاط؛ اختبر برسالة جديدة.
  • تتطلب أعداد المشاهدين عرض عدد المشاهدين أو وضع الحماس. لم تُنفَّذ أحداث مخصصة للهدايا أو التبرعات ولا الرد إلى المصدر. قد يظل الصف المعروض يوفر تسمية تبرع عبر data-ww-donation.
الحدث متى يُشغّل ملاحظات البيانات
message يظهر صف دردشة جديد معروض في WorldsWave. بيانات دردشة قياسية مع type: "worldswave"، واسم المرسل وصورته الرمزية ومعرّف مستخدم اختياري ولون الاسم والشارات وحالة المشرف والعضوية وقيمة التبرع والمرفق وهوية القناة. تُعرض معرّفات رسائل WorldsWave الثابتة كـ meta.messageId مع إزالة التكرارات بين لوحات المعاينة والدردشة الكاملة المتزامنة. تظل صور الرسائل المضمنة منقّاة عند تعطيل وضع النص فقط.
viewer_update يتغير إجمالي المشاهدين المباشرين الظاهر عند تفعيل التقاط عدد المشاهدين أو وضع الحماس. meta هو عدد المشاهدين الصحيح. الحقل الثابت data-ww-viewer-count تُفضّل القيمة؛ القيم القديمة المختصرة مثل 1.2K تُوحّد كخيار بديل.

FLEX TV

التنفيذ: sources/flextv.js

  • يقرأ لوحة الدردشة المعروضة على https://www.flextv.co.kr/channels/*/live كصفحات.
  • يجب أن تكون لوحة الدردشة ظاهرة. يُتخطى سجل الدردشة الموجود عند ربط المصدر، لذا اختبر بصف دردشة جديد.
  • لم يوثَّق بعد لهذا المصدر مسار لعدد المشاهدين أو التبرعات أو الرد إلى المصدر.
الحدث متى يُشغّل ملاحظات البيانات
message عنصر FLEX TV جديد ظاهر من نوع .chat-item تظهر الصفوف في خلاصة الدردشة المباشرة. بيانات دردشة قياسية مع type: "flextv", chatname, chatmessage, nameColor، وصور الشارات في chatbadges، وتفاصيل أعضاء FLEX ضمن meta عندما يتيحه data-member.

Seal Team Sloth

التنفيذ: sources/sealteamsloth.js

  • يقرأ الدردشة المنبثقة المعروضة على https://sealteamsloth.com/popout-chat/* كصفحات.
  • تتطلب أعداد المشاهدين عرض عدد المشاهدين أو وضع الحماس.
الحدث متى يُشغّل ملاحظات البيانات
message يظهر صف دردشة جديد معروض في Seal Team Sloth. بيانات دردشة قياسية مع type: "sealteamsloth"، واسم المرسل وصورته الرمزية ومحتوى الرسالة.
viewer_update يتغير إجمالي المشاهدين المباشرين الظاهر عند تفعيل التقاط عدد المشاهدين أو وضع الحماس. meta هو عدد المشاهدين الصحيح؛ القيم المختصرة مثل 1.2K تُوحّد.

MeetMe — التقاط DOM وWebSocket

التنفيذ: sources/meetme.js

  • يقرأ DOM للدردشة المباشرة المعروضة في MeetMe على app.meetme.com/live/view/... كصفحات وداخل api.gateway.meetme-live.com/web-live/... كـ iframe.
  • عندما يتوفر WebSocket الخاص بـ iframe، wss://video-live.meetme.com/ تُحلل الإطارات قبل بديل DOM لالتقاط أحداث مباشرة أكثر تفصيلاً.
  • hideevents يحجب الأحداث غير المرتبطة بالتبرعات؛ وتظل هدايا MeetMe وتبرعات الماس تملأ حقول التبرعات. capturejoinedevent يفعّل إشعارات الانضمام وإعادة الانضمام. الأحداث الخاصة بفاعل معين من نوع liked تستخدم الأحداث توجيه الخلفية المشترك الذي يتحكم فيه capturelikeevent؛ الإجمالي reaction تبقى التأثيرات موجّهة صراحةً إلى تراكب التفاعلات.
  • تفضّل أعداد المشاهدين العدد الظاهر في ترويسة MeetMe، وتعود إلى إجماليات WebSocket فقط عند عدم توفر عدد DOM. تُصدر الأعداد عند التغيير وتكرر أحدث عدد كل نحو 30 ثانية عندما showviewercount/hypemode مفعّل؛ لا تُرسل إجماليات المتابعين إلا عند تغيرها، وتُقيّد إلى نحو مرة كل 60 ثانية.
الحدث متى يُشغّل ملاحظات البيانات
message جديد SNSChatMessage تصل إطارات WebSocket، أو تظهر عناصر جديدة من نوع ChatMessage_* تظهر صفوف DOM ضمن ChatHistoryContainer_*. بيانات دردشة قياسية مع اسم المرسل وصورته الرمزية ونص الرسالة أو HTML وصور الشارات أو نصوصها. تفاصيل صف DOM حقول مسطحة meta كمفاتيح، بما في ذلك messageId, roomId, level, levelColor, badgeLabels, badgeSrcs, badgeClasses, isBouncer, isTopStreamer, isBestOfTheWeek, rank، و rowClassName. تضبط بيانات WebSocket meta.source = "websocket".
joined / rejoined / left SNSChatParticipant تصل إطارات إنشاء أو تحديث أو حذف عبر WebSocket، أو يعرض MeetMe عنصراً في DOM من نوع join-cell كصف. تتطلب إشعارات الانضمام وإعادة الانضمام التقاط أحداث الانضمام «joined» إلى البث. يصدر إشعارات نظام بنمط الدردشة مع اسم الفاعل وصورته الرمزية عندما يوفرهما MeetMe. meta.isNewViewer, meta.viewerLevelId, meta.isBouncer، و meta.isSubscriber تحافظ على حالة المشاركين.
new_follower يعرض MeetMe صف تفضيل أو متابعة في DOM مثل Favorited. يستخدم مفردات حدث المتابعة المشتركة. chatname هو الفاعل، chatimg هو صورة الملف الشخصي المكتشفة عند توفرها، والحقول المسطحة meta.favoriteText/meta.targetName تحافظ على تفاصيل الصف الأصلية.
gift SNSGiftMessage تصل إطارات WebSocket، أو يعرض MeetMe صورة هدية في صف دردشة. hasDonation يحمل تسمية الهدية الظاهرة أو قيمة الماس، contentimg يحمل صورة الهدية عند إتاحتها، ومفاتيح مسطحة مثل meta.giftName, meta.giftCount, meta.amount، و meta.currency تحافظ على التفاصيل المنظمة. الحقل gift محجوزاً لإطارات أو صفوف الهدايا الفعلية؛ وينبغي أن يظل عرض التبرعات مستنداً إلى hasDonation.
donation SNSDiamond تتيح إطارات WebSocket نشاط الماس. تُعامل إطارات الماس المخصصة كأحداث تبرع. hasDonation يُنسق كألماس للتحويل المشترك إلى الدولار الأمريكي، و meta.amount/meta.currency تبقى مسطحة للأتمتة.
liked / reaction SNSLike تصل إطارات WebSocket. تستخدم الإعجابات الخاصة بفاعل معين الحقل نفسه liked كمفردات وتوجيه مركزي في الخلفية مثل TikTok. تُرسل إجماليات الإعجابات المجمعة أو المجهولة إلى هدف التفاعلات فقط كـ reaction، مع بنية مسطحة meta.reactionType, meta.totalLikes، و meta.subscriberLikes. الفرق في معنى الحدث، وليس في إخفاء الهوية: capturelikeevent يتحكم فقط في الأحداث الفردية من نوع liked/like كأحداث.
follower_update SNSVideo تتيح بيانات WebSocket الوصفية إجماليات المتابعين. meta هو عدد المتابعين الصحيح، بما يطابق قواعد أحداث العدادات المشتركة.
guest_update SNSVideoGuestBroadcast تصل إطارات الإنشاء أو التحديث. حدث ببيانات وصفية فقط لحالة الضيف أو المقدّم المشارك المباشر. الحقول المسطحة meta تشمل المفاتيح status, position, totalGuests, isMuted, guestBroadcastId, videoViewerId، و broadcastId.
viewer_update تتغير شارة المشاهدين الظاهرة في الترويسة، أو SNSVideo تتيح بيانات WebSocket الوصفية إجماليات المشاهدين عند عدم توفر الشارة؛ وتُكرر الإجماليات غير المتغيرة كل نحو 30 ثانية أثناء التفعيل. meta عدد صحيح للمشاهدين؛ لا يُصدر إلا عند تفعيل التقاط عدد المشاهدين أو وضع الحماس.

Velora

التنفيذ: sources/velora.js و sources/websocket/velora.js

  • يقرأ الوضع القياسي DOM للدردشة الظاهرة؛ ويستخدم وضع WebSocket واجهة Velora Events API مع OAuth.
  • تشمل روابط الوضع القياسي المدعومة https://velora.tv/*, https://velora.tv/dashboard/stream/popout?panels=chat%2Cactivity&channel=CHANNEL&layout=vertical، و https://velora.tv/dashboard/stream/popout/CHANNEL/obs-chat.
  • تُصدر بطاقات Volts وبطاقات نمط نقاط القناة كبيانات أحداث عندما يتيحها DOM أو Events API.
الحدث متى يُشغّل ملاحظات البيانات
message تظهر صفوف دردشة Velora الجديدة أو تصل رسائل الدردشة عبر Events API. بيانات دردشة قياسية مع الحفاظ على الشارات ولون المؤلف والروابط والتعبيرات عندما لا يكون وضع النص فقط مفعّلاً.
volts بطاقات Volts في Velora أو channel.volts تصل بيانات Events API. hasDonation يحمل مبلغ Volts المعروض؛ تتضمن لقطات DOM meta.source = "dom".
channel_points بطاقات نقاط القناة أو الاستبدال في Velora أو channel.channel_points_redemption تصل بيانات Events API. chatmessage يحمل رسالة الاستبدال أو عنوان المكافأة؛ meta.rewardTitle يحدد المكافأة عند توفرها.
subscription يوضح صف نشاط Velora المرئي أن مستخدماً أصبح عضواً أو مشتركاً في القناة. membership يحمل تسمية العضوية الظاهرة.
viewer_update يتغير عدد المشاهدين الظاهر عند تفعيل التقاط عدد المشاهدين أو وضع الحماس. meta عدد صحيح للمشاهدين.

Parti — التقاط دردشة الملف الشخصي / النافذة المنبثقة

التنفيذ: sources/parti.js

  • يدعم روابط الملفات الشخصية مثل https://parti.com/USERNAME وروابط النوافذ المنبثقة مثل https://parti.com/popout-chat?id=USER_ID.
  • تستخدم أعداد المشاهدين نقطة نهاية نبض البث المباشر في Parti عند تفعيل التقاط عدد المشاهدين أو وضع الحماس.
الحدث متى يُشغّل ملاحظات البيانات
message تظهر صفوف دردشة Parti المرئية في دردشة الملف الشخصي أو النافذة المنبثقة. بيانات دردشة قياسية؛ nameColor يحافظ على لون مؤلف Parti المعروض و chatmessage يحافظ على المحتوى المضمن ما لم يُفعّل وضع النص فقط.
donation توضح صفوف تبرعات Parti المرئية أن مستخدماً تبرع بمبلغ. hasDonation يحمل المبلغ المعروض، meta.amount/meta.currency تُملأ عندما يمكن تحليلها، meta.amountText يحافظ على نص المبلغ الخام، و donoValue يُضبط للتبرعات بالدولار الأمريكي.
viewer_update يعيد نبض الاتصال في Parti عدد المشاهدين المباشرين. meta هو عدد المشاهدين الصحيح؛ تعيد الصفحة استخدام رمز نبض واحد لكل نافذة مصدر لتجنب تضخيم الأعداد.

CHZZK — التقاط الدردشة المنبثقة

التنفيذ: sources/chzzk.js

  • يدعم https://chzzk.naver.com/live/*/chat و https://chzzk.naver.com/iframe/live/*/chat.
  • تستخدم أعداد المشاهدين نقطة نهاية استطلاع حالة البث المباشر في CHZZK عند تفعيل التقاط عدد المشاهدين أو وضع الحماس.
الحدث متى يُشغّل ملاحظات البيانات
message تظهر صفوف دردشة CHZZK المرئية في تدفق الدردشة المنبثقة. بيانات دردشة قياسية مع type: "chzzk", nameColor، وروابط صور الشارات في chatbadges، والتعبيرات المعروضة في chatmessage ما لم يُفعّل وضع النص فقط.
للدردشة مع hasDonation تظهر صفوف تبرعات cheese المرئية في دردشة CHZZK. hasDonation يحمل مبلغ cheese المعروض. لا تضبط هذه الصفوف data.event.
viewer_update يعيد استطلاع حالة البث المباشر عدد المشاهدين. meta هو عدد المشاهدين الصحيح.

Rumble — التقاط DOM القياسي

التنفيذ: sources/rumble.js

  • يتطلب ملفات تعريف ارتباط لجلسة مصادَق عليها كي service.php تستجيب API المشاهدين.
  • توفر صفوف Rant المعروضة hasDonation؛ توفر بطاقات الغارات الواردة event: "raid". لا يصدر مصدر DOM هذا خلاصة أحداث المشتركين والمتابعين الخاصة بجسر API.
الحدث متى يُشغّل ملاحظات البيانات
message تظهر صفوف دردشة Rumble المرئية في دردشة الصفحة أو النافذة المنبثقة. بيانات دردشة قياسية؛ chatmessage يحافظ على HTML صور تعبيرات Rumble بعد أن تعرضه الصفحة ما لم يُفعّل وضع النص فقط.
viewer_update يستدعي لدى Rumble video.watching-now كخدمة كل 30 ثانية. meta عدد صحيح للمشاهدين؛ يستخدم credentials: 'include' لإعادة استخدام ملفات تعريف ارتباط الجلسة.
للدردشة مع hasDonationيتضمن صف Rant ظاهر سعراً.hasDonation يحافظ على السعر المعروض؛ لا تُضاف علامة حدث تبرع.
raidتظهر بطاقة غارة واردة في الدردشة.يستخدم رسالة الغارة الظاهرة وصورة البطاقة الاختيارية في contentimg.

Rumble — WebSocket / رابط API

التنفيذ: sources/websocket/rumble.js

  • يتطلب رابط Live Stream API الذي يملكه المبدع من https://rumble.com/account/livestream-api. توضح وثائق Rumble أن هذا الرابط يتضمن مفتاح البث المباشر، ولا يتطلب مصادقة منفصلة، وينبغي مشاركته مع أطراف ثالثة موثوقة فقط.
  • وسيلة نقل للقراءة فقط. لا تصف وثائق Rumble Live Stream API العامة نقطة نهاية رسمية لإرسال الدردشة، لذلك يمرر هذا المصدر الرسائل والأحداث إلى Social Stream، لكنه لا يرسل الدردشة إلى Rumble.
  • livestreams[].chat لا يُملأ إلا أثناء البث المباشر المحدد. استخدم ?streamId=... لتثبيت بث محدد عندما تتيح API أكثر من واحد؛ تفشل المعرّفات غير الصالحة الآن بدلاً من الرجوع بصمت إلى بث آخر.
  • تحل الصفحة أيضاً https://rumble.com/chat/popup/<livestreams[].id> كي تتمكن من فتح دردشة النافذة المنبثقة المحقونة العادية مباشرةً دون تحميل صفحة المذيع أولاً /live كصفحة.
الحدث متى يُشغّل ملاحظات البيانات
message تصل إدخالات جديدة من تدفق دردشة Rumble عبر SSE بعد أن تحل واجهة API الرسمية livestreams[].id؛ يعود إلى livestreams[].chat.recent_messages. بيانات دردشة قياسية. meta.source هي rumble_sse عندما يتوفر تدفق دردشة SSE ويتضمن روابط صور رمزية من users[].image.1؛ وإلا يعود إلى live_stream_api دون صور رمزية. عندما يتوفر كتالوج تعبيرات النافذة المنبثقة، chatmessage يعرض تعبيرات Rumble ذات الرموز المختصرة كصور HTML و meta.plainText يحافظ على نص الرمز المختصر الأصلي.
donation تظهر إدخالات Rant جديدة في livestreams[].chat.recent_rants. hasDonation يحمل المبلغ المنسق بالدولار الأمريكي؛ meta يتضمن amount_cents, amount_dollars، و expiresOn.
new_follower تظهر إدخالات جديدة في followers.recent_followers. حدث نظام مع chatname مضبوطاً على اسم مستخدم المتابع والطابع الزمني ضمن meta.followedOn.
new_subscriber تظهر إدخالات جديدة في subscribers.recent_subscribers. membership يُضبط على SUBSCRIBER; subtitle يطابق المبلغ الموثق بالدولار الأمريكي عندما يوفره Rumble.
subscription_gift تظهر إدخالات جديدة في gifted_subs.recent_gifted_subs. chatname هو مُهدي الهدية، hasDonation يصبح N Gifted، و meta يتضمن totalGifted, remainingGifts, giftType، و videoId.
follower_update كلما تغير عداد المتابعين المحدد. meta عدد صحيح للمتابعين. الافتراضي هو followers.num_followers؛ مع ?followerMode=total، ويستخدم followers.num_followers_total عندما يوفره Rumble.
subscriber_update كلما subscribers.num_subscribers يتغير. meta عدد صحيح للمشتركين.
stream_online / stream_offline عندما ينتقل البث المحدد بين حالة البث المباشر وعدم الاتصال. meta يتضمن مجموعة فرعية منقّاة من حقول البث (id, title, createdOn، وتسميات الفئات، والإعجابات وعدم الإعجاب، وإجماليات المشاهدين). القيم الحساسة مثل stream_key لا تُمرر عمداً.
viewer_update كلما livestreams[].watching_now يتغير للبث المحدد. meta عدد صحيح للمشاهدين المتزامنين؛ يصدر 0 عندما يتوقف البث المحدد عن الاتصال لمسح العدادات القديمة.

وسيلة النقل هذه مخصصة للقنوات التي تملكها أو تديرها. لأن رابط API يتضمن مفتاح بث مباشر، فلا تكشفه في التراكبات أو السجلات أو لقطات الشاشة أو ملفات المتصفح المشتركة. تأتي الصور الرمزية للدردشة من تدفق دردشة Rumble عبر SSE بعد أن تحل API الرسمية معرّف البث؛ ولا تستخرج وسيلة النقل هذه الصور الرمزية من صفحات Rumble.

YouNow — التقاط DOM

التنفيذ: sources/younow.js

  • يقرأ DOM للدردشة المباشرة المعروضة ويصدر بيانات دردشة قياسية مع type: "younow".
  • سطور نشاط الجمهور مثل is watching, I became a fan!، و invited N fans to this broadcast. تُوسم بـ event: true كي تتمكن مرشحات الأحداث من توجيهها.
الحدث متى يُشغّل ملاحظات البيانات
message تظهر صفوف دردشة جديدة في دردشة الجمهور المباشرة. بيانات دردشة قياسية؛ تضبط صفوف نشاط المعجبين والجمهور event: true.
viewer_update يتغير العدد الظاهر في لوحة الجمهور عندما showviewercount/hypemode مفعّل. meta عدد صحيح للمشاهدين؛ يصدر 0 عندما يختفي العداد.

Favorited Studio — التقاط DOM

التنفيذ: sources/favorited.js

  • يقرأ DOM للدردشة المباشرة المعروضة ويصدر بيانات دردشة قياسية مع type: "favorited".
الحدث متى يُشغّل ملاحظات البيانات
message تظهر صفوف دردشة جديدة. بيانات دردشة قياسية.
viewer_update يتغير العدد في علامة تبويب المشاهدين المباشرين عندما showviewercount/hypemode مفعّل. meta عدد صحيح للمشاهدين يُقرأ من content-live-viewers .

BEAM — التقاط DOM

التنفيذ: sources/beamstream.js

  • يقرأ DOM للدردشة المباشرة المعروضة ويصدر بيانات دردشة قياسية مع type: "beamstream".
الحدث متى يُشغّل ملاحظات البيانات
message تظهر صفوف دردشة جديدة. بيانات دردشة قياسية مع حقل نص عادي chatname، ورابط الصورة الرمزية في chatimg، وروابط الصور أو كائنات شارات SVG في chatbadges. تبقى الحقول المخفية في صفحة التقاط Beam فارغة. لا تُعامل روابط ملفات Beam الشخصية الأصلية كمصادر تمرير خارجية. contentimg قد يحمل مرفقات فيديو أو webm مضمنة عند إتاحتها.
viewer_update يتغير عنصر عداد المشاهدين بينما showviewercount/hypemode مفعّل. meta عدد صحيح للمشاهدين؛ لا يُصدر إلا عندما تعرض صفحة الدردشة عداد مشاهدين.

Castyr — التقاط DOM

التنفيذ: sources/castyr.js

  • يقرأ صفوف الدردشة الجديدة المعروضة من https://castyr.live/homebeta/popout-chat/* ويصدر بيانات دردشة قياسية مع type: "castyr".
  • يُتخطى سجل الدردشة الموجود عند ربط المصدر.
الحدث متى يُشغّل ملاحظات البيانات
message عنصر جديد من .chat-message يظهر كصف. بيانات دردشة قياسية مع اسم المرسل ومحتوى الرسالة المعروض ولون الاسم عند توفره.
viewer_update يتغير عدد المشاركين النشطين الظاهر في الدردشة عندما showviewercount/hypemode مفعّل. meta هو العدد الصحيح المقروء من عنصر الدردشة النشطة ذي العنوان في Castyr.

SOOP — التقاط DOM للمشغّل

التنفيذ: sources/sooplive.js. يدعم الحقل الموحد play.sooplive.com كالمشغّل والحقل القديم play.sooplive.co.kr من الروابط. يظل تخطيط الدردشة العام السابق معروفاً عند تقديمه.

تصدر الدردشة العامة type/platform: "sooplive"، والنص العادي chatname/userid, nameColor، والمنقّى chatmessage. تُستبعد الصفوف الموجودة ومعرّفات الرسائل المكررة ونسخ الترجمة والهمسات الخاصة. تتحول التعبيرات إلى صور آمنة أو نص بديل في وضع النص فقط.

مع showviewercount أو hypemode مفعّلاً، viewer_update يحمل عدداً صحيحاً في meta من حقل المشغّل #nAllViewer. قد لا تعرض النوافذ المنبثقة المخصصة للدردشة فقط هذا العدد. يستخدم SSApp المشغّل الكامل عند فتح نافذة منبثقة منفصلة، لأن نوافذ SOOP المنبثقة الحالية تعتمد على الصفحة التي فتحتها.

Gosh — التقاط دردشة القناة

التنفيذ: sources/gosh.js. افتح https://gosh.com/USERNAME مع ظهور الدردشة، أو الصق ذلك الرابط في Add other source في SSApp. لا تلزم نافذة دردشة منبثقة.

تصدر صفوف الدردشة الجديدة type/platform: "gosh"، والنص العادي chatname, nameColor، والمنقّى chatmessage. تحتفظ الصور وملفات GIF المضمنة بروابط HTTP(S) الآمنة. مع textonlymode، وتصبح الصور نصاً بديلاً أو [image] عند عدم توفر نص بديل. تبقى الصور الرمزية والشارات والتبرعات والعضويات فارغة عند غيابها عن الصف الملتقط.

أبقِ الدردشة ذات العرض الافتراضي الجزئي عند أحدث الرسائل. تُستبعد المحفوظات الموجودة والصفوف المعاد عرضها وإشعارات النظام دون مؤلف. تبقى فهارس العرض داخلية ولا تُصدر كمعرّفات رسائل أصلية. لا تُستنتج أحداث المتابعة أو التبرعات أو عدد المشاهدين أو الإشراف.

Livacha — التقاط غرفة الدردشة

التنفيذ: sources/livacha.js. افتح https://livacha.com/chat/ROOM مع ظهور الدردشة، أو الصق رابط الغرفة في Add other source في SSApp.

تصدر صفوف الدردشة الجديدة type/platform: "livacha"، والنص العادي chatname, chatimg, nameColor، والمنقّى chatmessage. تتحول روابط الصور الرمزية والصور المضمنة النسبية إلى روابط HTTP(S) مطلقة. تُسطح الفقرات وفواصل الأسطر والقوائم في رسالة دردشة واحدة. مع textonlymode، وتصبح الصور نصاً بديلاً أو [image].

تُستخدم معرّفات الرسائل داخلياً لتجنب إعادة التقاط التعديلات والصفوف المعاد إدراجها. تُتخطى المحفوظات الأولية والرسائل الأقدم المضافة في البداية؛ وتبقى الطوابع الزمنية وقوائم التفاعل خارج النص الملتقط. لا تُستنتج أحداث تبرع أو عضوية أو إشراف أو عدد مشاهدين.

Stream.space — التقاط DOM تجريبي

التنفيذ: sources/streamspace.js. يطابق فقط https://beta.stream.space/chat-popup.php?channel=USERNAME والمكافئ https://stream.space كنافذة منبثقة.

تصدر صفوف الدردشة الجديدة المعروضة type: "streamspace", platform: "streamspace"، والنص العادي chatname/userid, chatmessage، والصورة الرمزية chatimg، ومستوى مستنداً إلى صورة chatbadges، و nameColor. تُعاد بناء التعبيرات المضمنة كصور آمنة، أو كنصها البديل عندما textonlymode مفعّل. تُستبعد المحفوظات الموجودة وإشعارات الترحيب ومعاينات الردود والنسخ المثبتة المكررة.

viewer_update يحمل عدداً صحيحاً في meta مقروءاً من #popupViewersNum عندما showviewercount أو hypemode مفعّل. لا تُستنتج أحداث تبرعات أو عضوية أو إشراف.

تجريبي: بقيت النافذة المنبثقة في beta على Loading أثناء الفحص. حمّل SSApp النافذة المنبثقة والتقط تحديثات المشاهدين، لكن تسليم الدردشة المباشرة والنافذة المنبثقة الإنتاجية لا يزالان غير متحقق منهما. لا يستطيع SSN التقاط الرسائل التي لا يعرضها الموقع.

w.tv وPrime — التقاط DOM

التنفيذات: sources/wtv.js على https://w.tv/USERNAME/chat و sources/prime.js على https://prime.gs/USERNAME?chat_popout=1.

تستخدم صفوف الدردشة الجديدة type/platform من wtv أو prime، والنص العادي chatname, nameColor، والمنقّى chatmessage. تتحول التعبيرات المضمنة إلى صور آمنة أو نص بديل في وضع النص فقط. يتضمن Prime أيضاً حقل الصف userid ويدعم روابط الملفات الشخصية عند تسجيل الدخول وتسميات أسماء المستخدمين عند تسجيل الخروج. تُترك الصور الرمزية والشارات فارغة عندما لا تتوفر في بنية الصف المتحقق منها.

تُستبعد المحفوظات الأولية والبطاقات المثبتة ومعاينات الردود. يعرض w.tv جزءاً متغيراً من الدردشة بحسب موضع التمرير: أبقه عند أحدث الرسائل للالتقاط. معرّفات الاختبار في DOM فهارس عرض، وليست معرّفات رسائل أصلية. يتخطى Prime السجل الأقدم المحمّل فوق الرسائل الأولية وعناصر المستخدمين المتجاهَلين النائبة.

لا تتيح أي من النافذتين المنبثقتين عدد مشاهدين موثوقاً للبث، لذلك لا تصدر هذه المحوّلات تحديثات مشاهدين ولا تستنتج أحداث تبرع أو اشتراك أو إشراف.

توحيد الأحداث عبر المنصات

استخدم هذا الجدول لفهم تعيين المفاهيم المتشابهة عبر المنصات. حيثما أمكن، ينبغي أن تتوافق المصادر الجديدة مع أسماء الأحداث المشتركة في العمود الأول.

المفهوم YouTube WS Twitch WS Kick WS
عضو / مشترك جديد sponsorship new_subscriber new_subscriber
تجديد / إعادة اشتراك resub resub resub
اشتراكات مُهداة giftpurchase subscription_gift subscription_gift
استلام هدية giftredemption - -
محطة إنجاز membermilestone - -
تبرع / إكرامية superchat, supersticker, jeweldonation مع hasDonation cheer (bits) donation
متابع جديد new_follower (بالاستطلاع الدوري)* new_follower new_follower
عدد المشاهدين viewer_update viewer_update viewer_update
عدد المتابعين - follower_update follower_update
عدد المشتركين subscriber_update subscriber_update -
حالة البث live_chat_ended stream_online/stream_offline stream_online/stream_offline
غارة - raid -
استبدال مكافأة - reward reward

ملاحظات التوحيد

  • يستخدم YouTube sponsorship للأعضاء الجدد، بينما يستخدم Twitch وKick new_subscriber. فكّر في التحقق من كليهما عند بناء مشغّلات عبر المنصات.
  • resub متسق عبر المنصات الثلاث للتجديدات.
  • تختلف أحداث الهدايا: يستخدم YouTube giftpurchase/giftredemption، بينما يستخدم Twitch وKick subscription_gift.
  • تختلف التبرعات حسب المنصة: يستخدم YouTube أسماء أحداث مدفوعة محددة مثل superchat, supersticker، و jeweldonation مع hasDonation؛ لدى Twitch ‏bits (cheer)؛ لدى Kick تبرعات (donation).
  • new_follower أصبح متسقاً عبر المنصات الثلاث، لكن YouTube يستطلع المشتركين الجدد وقد يعيد نتائج متأخرة أو غير مكتملة.
  • للإعجابات والتفاعلات عقدان منفصلان: الفردي liked/like تصل الأحداث إلى تراكب التفاعلات ما لم تُصفَّ عالمياً، ولا تدخل مسار المعالجة الرئيسي إلا عندما capturelikeevent مفعّل. الأحداث المرئية أو الأصلية للمنصة من نوع reaction تحتفظ الأحداث بالتوجيه الذي يحدده منتجها. أما الأحداث الإجمالية من نوع likes_update تُتحكم العدادات بصورة منفصلة عبر captureliketotals.

حدود التغطية والتوافق

يصف هذا المرجع البيانات المنفّذة، ولا يضمن أن كل منصة تسلّم كل حدث. الحقل الفارغ hasDonation تعيينات في مصدر لا تثبت دعم التبرعات. تظل رؤية DOM وصلاحيات الحساب ومفاتيح الالتقاط وتوفر API هي ما يحدد البيانات المستقبلة. تمرير الحذف خاص بالمصدر؛ لا تفترض وجود مزامنة إشراف شاملة.

الاختلافات والفجوات المتتبعة

الزوج / المجال اختلاف / نقص مرصود الأثر
Twitch: القياسي مقابل WebSocket مشترك: reward, subscription_gift, viewer_update, hype_train، والخيار الذي يُفعّل اختيارياً watch_streak. للوضع القياسي فقط: giftpurchase, knock, community_highlight. لـ WebSocket فقط: new_subscriber, resub, cheer, powerup, raid, new_follower, follower_update, subscriber_update. channel_points أصبح اسماً بديلاً قديماً مهملاً لاستبدال مكافآت Twitch؛ ينبغي للتكاملات الجديدة الاعتماد على reward.
Kick: القياسي مقابل WebSocket يصدر الوضع القياسي علامات خفيفة (gift, reward، والقيمة المنطقية true, viewer_update). يضيف WebSocket أحداث المتابعة والاشتراك والهدايا واستبدال المكافآت وKICKs والإشراف وحالة البث الرسمية. ويحتفظ بمعالجة التوافق مع النوع القديم raid كبيانات، لكن Kick لا يوفر حالياً اشتراكاً رسمياً للغارات أو الاستضافة. وضع WebSocket أكثر تفصيلاً؛ ينبغي مراجعة الأتمتة المبنية على أسماء أحداث خاصة بالوضع القياسي عند التبديل. لا تشترط وجود حدث غارة في Kick.
YouTube: القياسي مقابل WebSocket مشترك: superchat, supersticker, jeweldonation, sponsorship, resub, giftpurchase, giftredemption, viewer_update. للوضع القياسي فقط: thankyou, redirect. لـ WebSocket فقط: membermilestone, new_follower, subscriber_update, view_update, likes_update (تفعيل اختياري). تُوحّد أسماء الأعضاء والأحداث الأساسية بينهما؛ ويستخدم Super Chat وSuper Sticker وJewels hasDonation، بينما لا تفعل ذلك مشتريات هدايا العضوية أو استبدالها.
جميع الواجهات تملأ مصادر كثيرة hasDonation دون ضبط data.event. هذا صحيح؛ ينبغي أن يستند عرض التبرعات إلى hasDonation، مع data.event محجوزاً لمعاني النظام أو الأحداث.

الأسماء البديلة والقديمة الخاصة بالمصادر

هذه التعيينات خاصة بالمصدر والسياق المدرجين، وليست بدائل عامة. يختلف دعم المستهلكين للأسماء البديلة باختلاف الصفحة. لا تزال مصادر TikTok DOM وTikFinity الحالية تصدر followed؛ يستخدم Velora subscription و channel_points، ويستخدم Streamlabs subscription. اقبل عقد المصدر الحالي وأسماءه البديلة القديمة ذات الصلة بدلاً من إعادة تسمية كل حدث مطابق.

الاسم البديل / الاسم القديم البديل القياسي السياق
subscriptionnew_subscriberاشتراك جديد في Twitch/Kick
subgiftsubscription_giftاشتراك Twitch مُهدى
membershipsponsorshipعضو YouTube جديد (عام)
new_membersponsorshipعضو YouTube جديد
new_membershipsponsorshipعضو YouTube جديد
newmembersponsorshipعضو YouTube جديد
new-membershipsponsorshipمستخرج YouTube DOM (الصيغة ذات الشرطة)
upgraded_membershipresubترقية فئة في YouTube
upgraded-membershipresubمستخرج YouTube DOM (الصيغة ذات الشرطة)
membership_upgraderesubترقية فئة في YouTube
membership_milestonemembermilestoneدردشة محطة إنجاز في YouTube
member_milestonemembermilestoneدردشة محطة إنجاز في YouTube (صيغة الشرطة السفلية)
gift_membershipgiftpurchaseحزمة هدايا YouTube
membership_giftgiftpurchaseحزمة هدايا YouTube
giftmembershipsgiftpurchaseحزمة هدايا YouTube (صيغة الجمع)
gifted_membershipgiftredemptionهدية YouTube مستلَمة
gifted_membershipsgiftpurchaseحزمة هدايا YouTube (صيغة الجمع)
community_giftgiftpurchaseحزمة هدايا مجتمعية
channel_pointsrewardاستبدال مكافأة Twitch عبر WebSocket (اسم بديل قديم)
followednew_followerمخرجات TikTok DOM/TikFinity الحالية؛ اقبل الاسمين عند الجمع بين أوضاع التقاط TikTok.

استخدام هذا المرجع

  • عند إضافة حدث جديد، أعد استخدام المفردات الموجودة (subscription_gift, viewer_update، وغيرها) كلما أمكن. إذا تعذر تجنب انحراف، فوثّقه هنا مع السبب.
  • أبقِ data.meta متوقعاً: فضّل المفاتيح المسطحة، ولا تحمّل السلاسل النصية بيانات مختلطة، وضمّن الوحدات دائماً (currency, bits, duration).
  • حدّث هذه الصفحة بالتزامن مع تغييرات البيانات؛ ولا تحدّث تعليمات الوكلاء إلا عند تغير قواعد التطوير المشتركة.
  • تحقق من تغييرات البيانات في كل من المصدر المُصدر والتراكب أو مشغّل Event Flow المستهلك.
  • يعتمد الالتقاط على دعم المصدر والإعدادات. لإخفاء الصفوف الموسومة كأحداث في لوحة الإرساء أو تراكبات الرسائل المميزة، أضف &hideevents أو &hideallevents. لإخفاء أحداث محددة، استخدم &filterevents=subscription_gift,new_follower,gifted.
  • بالنسبة إلى YouTube وTwitch وKick، فعّل وضع WebSocket لأوسع دعم للأحداث الخاصة بالمنصة. يتوفر التقاط الهدايا والتبرعات في YouTube (بما في ذلك الهدايا وSuper Chats) في وضعي Standard وWebSocket؛ ويضيف WebSocket أنواع أحداث أخرى. يظل الدعم الدقيق مختلفاً بحسب المنصة ودور الحساب والنطاقات الممنوحة.

العودة إلى الأعلى

تراكبات تحقيق الدخل

تستخدم تبرعات NinjaBacker platform: "ninjabacker", type: "ninjabacker", chatname، والنص العادي chatmessage, textonly: true، وحقل مسبوق باسم المصدر id، والحقل المنسق hasDonation، والحقل الرقمي donoValue. هي صفوف عادية شبيهة بالتبرعات دون event كتجاوز. meta.ninjabacker يتضمن قيمة ISO currency والقيمة بوحدات العملة الرئيسية amount. تستخدم التبرعات المجهولة اسم العرض Anonymous. يستخدم المصدر إما SSE مباشرًا (دون إعادة تشغيل)، أو مستقبِل Webhook الموقّع الاختياري على SSN API (مع تسليم رسائل مؤجلة حتى سبعة أيام). تستخدم عمليات التسليم الموثوقة حقلاً ثابتاً ninjabacker:delivery:DELIVERY_ID كمعرّف. لا يتلقى أي من الوضعين تسويات عكسية للاستردادات أو النزاعات. لا تدخل بيانات اعتماد المستقبِل وأسرار التوقيع في بيانات الأحداث أبداً. قيم callbackId التي يتحكم فيها المستدعي ليست هوية الدفع ولا تُمرر. تُستبعد تبرعات اختبار لوحة التحكم من صفوف التبرعات. وهي تصدر event: "monetization_test" مع meta.ninjabackerTest يحتوي على id وat (مللي ثانية Unix)، لتنبيه المعاينة المخصص فقط.

event: "monetization_update" لقطة ببيانات وصفية فقط من type/platform: "socialstream". meta.monetization.wishlist يتضمن enabled وqr وposition وrank وtotal ورابط url العام والعنصر الحالي (name وamount وcurrency وimage ورابط url عام) أو null. meta.monetization.ninja يتضمن enabled وqr وposition وusername ورابط url العام للتبرع. لا تُدرج معرّفات Tip الخاصة أبداً. meta.monetization.ebay يتضمن enabled وqr وposition وdisplay ‏(cycle/cheapest/first) وseconds وإعدادات الإعلانات الاختيارية والعناصر العامة. لكل عنصر id وname وamount وcurrency وimage وurl وauction وstartingBid وendsAt وavailable وbought وupdatedAt. الأوقات بمللي ثانية Unix. لا تُدرج بيانات اعتماد البائع أو هوية المشتري.

يتضمن شراء قائمة رغبات يؤكده المضيف أيضاً meta.wishlistPurchase مع id وname وsupporter اختياري وat (مللي ثانية Unix). هذا تأكيد من المضيف، وليس إشعار دفع Amazon، ولا يُحتسب تبرعاً مالياً. ينبغي للتراكبات إزالة التكرار باستخدام id وتجاهل إشعارات الشراء القديمة.

طلبات Shopify المدفوعة

يصدر مستقبِل Shopify الموقّع الاختياري platform/type: "shopify" و event: "purchase" فقط لـ orders/paid مع financial_status: "paid"، وإجمالي موجب، test: false، ودون إلغاء، وطابع زمني حالي لتحديث جسم الرسالة الموقّع. لا تصدر إشعارات الاختبار أو عدم الدفع أو التقادم أو الإلغاء أو الاسترداد إجراءات شراء. ولا تُستنتج نية الإهداء.

chatname هو Anonymous؛ وتُستبعد حقول العميل والملاحظات الخاصة وروابط الطلبات. chatmessage نص عادي مع textonly: true; subtitle يحتوي على ما يصل إلى ثلاثة عناوين منتجات عامة. meta.commerce يتضمن orderTotal و currency بعملة المتجر، إضافةً إلى quantity عند معرفة عدد كامل وصالح. يظل المستلِم والغرض المادي أو الرقمي غير محددين. دون hasDonation أو donoValue يُضبط. id تجزئة ثابتة معتمة خاصة بالمتجر والطلب وببادئة Shopify؛ وليست معرّف طلب خاماً.

تستخدم المشتريات مسارات النشاط الحالية وفئة Purchase في Multi-Alerts ومسارات Event Flow. ويستخدم ترويج المنتجات meta.monetization.commerce ككتالوج. لا يولّد استيراد منتج أو ضبط تسميته الترويجية على Gift حدث شراء أو هدية. إعداد Shopify وحدود التسليم.

الهدايا والتجارة

استخدم event: "gift" لهدية، giftcontribution للدعم المدفوع نحو هدية، giftfunded لاكتمال التمويل، و purchase لبيع منتج. هذه الأسماء مستقلة عن المزوّد وعن كون العنصر مادياً أو رقمياً. احجز الاسم القديم giftpurchase لحدث العضويات المُهداة؛ استخدم Throne هذا الاسم سابقاً بصورة خاطئة ويصدر الآن gift. تبقى الجهات الحالية المنتجة لأحداث العضوية دون تغيير. ينبغي تحويل مرشحات أسماء أحداث Throne المخصصة إلى gift؛ لا تحتاج مرشحات التبرعات إلى تغيير.

hasDonation يظل إشارة التوافق للدعم المدفوع، مع donoValue يحمل قيمته المقدمة أو المقدرة بالدولار الأمريكي. تحتفظ الهدايا والمساهمات بهذين الحقلين. يحذف اكتمال التمويل كليهما لتجنب احتساب المساهمات مرتين. تحذفهما مبيعات المنتجات العادية افتراضياً، محافظةً على عقد eBay. لا تستنتج نية الإهداء من متجر أو رابط قائمة رغبات أو عنصر مادي: يظل الشراء للمشتري أو لمستلِم آخر عملية بيع ما لم يحدد المصدر صراحةً الإهداء للمبدع.

حقل مشترك اختياري meta.commerce الحقول هي recipient (creator, buyer, other)، itemType (physical, digital, service)، quantity (عدد موجب للعناصر)، currency (عملة ISO)، goalAmount (هدف تمويل بوحدات العملة الرئيسية، وليس دخلاً جديداً أبداً)، و orderTotal (إجمالي طلب مدفوع معروف بوحدات العملة الرئيسية؛ تجارة وليست إيرادات تبرعات). احذف التفاصيل المجهولة. احتفظ بأسماء العناصر في subtitle، والصور في contentimg، ونص الداعم في chatmessage. تظل بيانات المزوّد الوصفية الموجودة متاحة. يوفر Throne المستلِم والعملة، إضافةً إلى goalAmount عند الاكتمال؛ ويوفر eBay الكمية. لا يخمّن أي منهما نوع العنصر أو يكشف معلومات المستلِم الخاصة.

تعرض خلاصة النشاط هذه الأحداث حتى دون نص داعم. يستخدم Multi-Alerts عرض التبرعات للهدايا والمساهمات، بما في ذلك إشعار Gift Fully Funded مستقل دون قيمة نقدية. للمشتريات فئة Purchase منفصلة، مفعّلة افتراضياً، مع purchasestyle, purchasesound, purchaseaccent، و disablepurchases كعناصر تحكم URL. لا تغيّر تنبيهات الشراء إجماليات التبرعات.

يتيح Event Flow أسماء الأحداث هذه في مشغّلات Event Type وOther Event. وتظل مشغّلات Donation تفحص hasDonation؛ تحافظ مشغّلات Gift Sub على معنى العضوية. يقبل Compare Property مسارات متداخلة مثل meta.commerce.recipient. تقبل قوالب الإجراءات {meta.commerce.quantity} و {meta.commerce.currency}، إلى جانب الحقل الموجود {donation}, {subtitle}، و {meta}. تراعي المسارات المتداخلة حالة الأحرف، وتُعرض القيم المفقودة فارغة، ويُحظر اجتياز سلسلة prototype.

Webhooks تجارة المبدعين والتراكبات الترويجية

تحتفظ مدفوعات Donation العامة في Ko-fi بـ hasDonation ويكتسب قيمة بالدولار الأمريكي donoValue. تستخدم مدفوعات الاشتراك new_subscriber أو resub، مع الفئة في membership. يستخدم Shop Order وCommission purchase دون قيم تبرعات. تبقى أحداث Ko-fi الخاصة مستبعدة. يُفك ترميز JSON المرمّز كبيانات نموذج مرة واحدة؛ والأسماء والرسائل نصوص عادية.

Buy Me a Coffee donation.created يحافظ على الدعم المالي؛ extra_purchase.created و commission_order.created تصبح purchase. wishlist_payment.created يصبح giftcontribution باستخدام مبلغ الدفع ذلك فقط؛ meta.commerce.completed يسجل علامة الاكتمال من المزوّد دون إصدار صف مالي آخر. membership.started يصبح new_subscriber مع الفئة في membership، دون إساءة استخدام hasDonation لاسم الفئة. لا يُعامل مبلغ بدء الاشتراك كرسوم مدفوعة مستقلة. لا تنتج أحداث الاختبار أو الاسترداد أو الفشل أو التحديثات ودورة الحياة غير المدعومة تنبيهات مدفوعة. تُحذف ملاحظات الداعمين المخفية.

يدعم Fourthwall الحدث ORDER_PLACED ‏(purchase)، وGIFT_PURCHASE ‏(gift، والمستلِم other)، وDONATION (صف تبرع عادي)، وSUBSCRIPTION_PURCHASED ‏(new_subscriber). تحتفظ إجماليات الطلبات الموجودة بـ hasDonation للتوافق مع الإصدارات السابقة، مع الوسم meta.commerce.legacyDonationValue: true؛ هذا استثناء صريح من الإعدادات الافتراضية الجديدة لمبيعات المنتجات. تصدر الطلبات التي طُبقت عليها بطاقات هدايا تنبيه شراء دون قيمة تبرع: إذ لا يمكن استنتاج الرسوم الجديدة بثقة من إجمالي الطلب، وقد احتُسب شراء الهدية مسبقاً. لا تُستخدم أسماء الفوترة أو عناوين البريد الإلكتروني للهوية العامة. لا تولّد أحداث اختبار لوحة التحكم وتحديثات الطلبات تنبيهات مدفوعة.

تحافظ هذه المحوّلات على التمرير وإجراءات الروبوت وEvent Flow وتوجيه الوجهات الموجودة، مع meta.webhookId لإزالة التكرار. تتيح الأسماء العامة والرسائل النصية العادية وأسماء العناصر المعروفة في subtitle، ورمز ISO meta.commerce.currency إلى جانب قيم التبرع الرقمية عند انطباقها. لا تضيف محاسبة الاستردادات أو مصادقة جديدة للمستقبِل؛ استخدم مسار Webhook المضبوط مسبقاً للمزوّد.

meta.monetization.commerce في monetization_update يتضمن enabled وqr وposition وdisplay ‏(first/cycle) وseconds ومصفوفة items عامة. لكل عنصر name وurl وimage وamount اختياري (null عندما يكون مجهولاً) وcurrency وpurpose ‏(shop/gift/support/membership). هذه تفاصيل ترويجية يُدخلها المضيف، وليست دليلاً على الدفع. لا تصدر إضافة العناصر أو تعديلها حدث تبرع أو شراء. يستخدم التراكب العام mode=commerce; view=both|showcase|card|alerts يفصل الترويج عن النشاط. تتحكم معاملات URL الاختيارية style وscale وcardevery وcardfor وonlytype في العرض. تقبل أوضاع المزوّدين الحالية أيضاً view وعناصر التحكم في الجدولة. راجع دليل الإعداد.

أحداث هدايا Throne

يمرر تكامل تحقيق الدخل الاختياري أحداث Throne الموقّعة مع platform و type مضبوطاً على throne. تستخدم الثلاثة معرّف تسليم ثابتاً id، والنص العادي chatname, chatmessage مع textonly: true، واسم العنصر في subtitle، وصورة مصغرة اختيارية عبر HTTPS في contentimg.

كحدثالمعنىمبلغ التبرع / الترتيب
giftهدية مشتراةhasDonation وقيمة الدولار الأمريكي donoValue؛ وترتيب الهدية +1
giftcontributionمساهمة نحو هديةمبلغ المساهمة فقط؛ دون زيادة في الترتيب
giftfundedاكتمال هدية ممولة جماعياًلا hasDonation أو donoValue، لتجنب احتساب المساهمات السابقة مرتين؛ وترتيب الهدية +1

meta.throne يتضمن itemName, creator (اسم مستخدم عام)، completed, currency والقيمة بوحدات العملة الرئيسية amount. بالنسبة إلى giftfunded، يصف المبلغ الهدف، وليس دخلاً جديداً. يظل مُهدو الهدايا المجهولون Anonymous؛ تستخدم الهدايا المجتمعية المكتملة Community. لا تُمرر حقول الدفع والشحن الخاصة أبداً.

monetization_update تتضمن اللقطات أيضاً meta.monetization.throne: enabled, username, url, qr, position, rank، و gifts. لا تتضمن هذه اللقطات رابط Webhook أو بيانات اعتماد للاستماع.

أوامر المضيف الصوتية (معاينة سطح المكتب)

عنصر Event Flow عندما أقول... يتلقى المشغّل أوامر موثوقة من الميكروفون المحلي في SSApp. يستخدم سياق الإجراء الداخلي chatname: "Host", type: "hostvoice"، والعبارة التي تم التعرّف عليها في chatmessage، و textonly: true. هذا ليس حدث منصة وارداً أو وسيلة نقل دردشة جديدة. لا يمكن لإرسال هذه الحقول عبر الدردشة تفعيل مشغّل صوتي.

يتطلب إصدار سطح مكتب محدّثاً وبدء الميكروفون صراحةً وتفعيل الإجراءات بعد وضع الاختبار. راجع إعداد المعاينة وحالة التحقق.

عناصر تحكم عرض المنتجات

الحقل الموجود monetization_update قد تتضمن اللقطات meta.monetization.commerce.live: ‏null للجدول المحفوظ، أو {mode: "show" | "hide", url?: "https://...", until: 0 | epochMilliseconds}. يطابق Show رابط المنتج المحفوظ تماماً؛ ولا يعرض بطاقة إذا كان المنتج مفقوداً. تنتهي قيمة until الموجبة بالعودة إلى الجدول المحفوظ؛ وتستمر القيمة صفر حتى التغيير أو إعادة تشغيل SSN. يمنع Hide الترويجات، وليس تنبيهات النشاط المدفوع.

commerce.viewerURL هو رابط المتجر المنشور للقراءة فقط، أو سلسلة فارغة. عند وجوده، تشير إليه رموز QR الترويجية. لا يتضمن جلسة SSN أو مفتاح النشر أبداً. تبقى المنتجات في commerce.items. لا تصدر عناصر العرض أو عمليات الاستيراد أو النشر أي حدث تبرع أو شراء. راجع عناصر تحكم المنتجات لاستخدام Event Flow وواجهة API عن بُعد.

عنصر Event Flow commerceControl ينتظر الإجراء الرد المباشر أو رد Chrome (حتى ثماني ثوانٍ). في بيانات الأحداث العادية، يحتفظ بالحدث ويضيف meta.commerceControlResult: {success: true, commerce: controlState} أو {success: false, error: "..."}. لحقل موجود رقمي أو مصفوفة أو قيمة أخرى غير كائنية meta، تظل البيانات الوصفية دون تغيير ويُرجع التشخيص كـ commerceControlResult في نتيجة الإجراء بدلاً من ذلك. توقف عناصر التحكم الفاشلة الإجراءات اللاحقة في تلك السلسلة دون حجب حدث الدفع الأصلي. لا يثبت انتهاء المهلة أن التحكم لم يُطبّق؛ افحص الحالة قبل إعادة محاولة أمر نسبي مثل Next. يؤكد النجاح حالة الاختيار أو الإخفاء أو الجدولة المحلية، ولا يؤكد أبداً الظهور في OBS أو مزامنة الصفحة العامة.

مسارات عمل Stream Deck / API المسماة

إن مشغّل سير عمل مسمى ينشئ رسالة Event Flow داخلية مع type: "api", event: "workflow_trigger", chatname: "Stream Deck / API"، وحقل فارغ chatmessage، و textonly: true. حقلُه meta.workflow ككائن يحتوي اسم المشغّل وقيمة JSON يوفرها المستدعي data ككائن. اقرأ القيم عبر قوالب مثل {meta.workflow.data.minutes}. لا تُقيّم إلا التدفقات المحفوظة والمفعّلة التي تطابق ذلك المشغّل صراحةً. هذا ليس حدث مشاهد أو دردشة وارداً ولا يُبث كدردشة؛ ولا يؤدي نسخ هذه الحقول إلى الدردشة إلى تفعيل المشغّل المسمى.

تجربة جمهور NinjaChatter

يرسل موصل الإضافة المقترنة التجريبي صفوفاً للعرض فقط مع type: socialstreamchat, platform: ninjachatter، و textonly: true. meta.ninjachatter يحمل origin: audience، والحقل الوصفي provider، والحقل العام room . تتجاوز هذه الصفوف الردود إلى المنصات والروبوتات ومشغّلات Event Flow والنقاط. ظهور اسم مزوّد لا يعني التفويض. تتضمن لقطات مصدر NinjaChatter القديمة meta.ninjachatter.room لمنع التكرار الخاص بالغرفة.

يستخدم Cheer مساراً منفصلاً ومصادَقاً عليه للمطالبة والنتيجة، ولا يستخدم أمراً خاصاً للدردشة أبداً. يصدر الإعداد الثابت الجاهز حدث تراكب Actions الموجود show_text كرسالة لمدة ثلاث ثوانٍ. يعني استلامها قبول النقل، وليس التحقق من العرض في OBS. لا يمكن لأي بيانات جمهور اختيار إجراءات اعتباطية. التجربة معطّلة افتراضياً في NinjaChatter؛ ويحتفظ Electron بالتمرير الحالي حتى يُتحقق من حدود الاقتران الخاص الجديدة.

لوحات خانات التجارة والمبيعات الأخيرة

الحقل الموجود monetization_update كحدث (type/platform: socialstream) يتضمن أيضاً meta.monetization.boards. حقلُه board يتضمن title, style (spots/teams)، columns (1–20), visible، وحتى 120 من spots. لكل خانة حقل نصي id، والنص العادي label, status (available/claimed/revealed) و result (نص عادي، فارغ حتى الكشف). الحجوزات والكشف حالات عرض يُدخلها المضيف، وليست دليلاً على الشراء أو تخصيصات عشوائية.

boards.sales يحتوي على ما يصل إلى 100 سجل حديث: id, title، والحقل الاختياري amount (null عندما يكون مجهولاً)، currency, quantity, source، و at (مللي ثانية Unix وقت التسجيل). automatic يفعّل الجمع اختيارياً، salesVisible يتحكم في العرض و revision يزداد عند التغييرات. لا يقبل الجمع التلقائي إلا purchase كأحداث من Shopify وبائعي eBay وFourthwall وKo-fi وBuy Me a Coffee؛ وتُستبعد الأحداث الخاصة أو التجريبية. لا يعامل بيانات المزاد الوصفية أو التبرعات أو الهدايا أو حجوزات الخانات كمشتريات. لا تستبدل السجلات التلقائية سعر العنصر بإجمالي الطلب أو سعر القائمة أو مبلغ التبرع. تستخدم السجلات اليدوية source: "Host confirmed".

تُحفظ الحالة في تخزين تحقيق الدخل الخاص بهذا التثبيت؛ وتستبعد اللقطات العامة معرّفات إزالة تكرار التسليم وهوية المشتري والأسرار. تحتفظ المبيعات المعروضة صراحةً بمعرّفات أحداثها لإزالتها. تتطلب الاستردادات إزالةً من المضيف. تُحفظ معرّفات الشراء المكررة بصورة منفصلة (حتى 2,000)، بما في ذلك بعد مسح السجل الظاهر. الحقل الموجود getCommerceState تتضمن الاستجابة commerce.boards; commerceControl يقبل أوامر اللوحة والمبيعات الموثقة في دليل اللوحة. تبث التعديلات اليدوية الحالة المحدّثة لكنها لا تنشئ أحداث شراء أو إجماليات تبرعات أو مكافآت مدفوعة أبداً. تختفي التراكبات عند غياب لقطة المضيف لمدة 35 ثانية.

إضافات سير عمل البائع: commerce.boards.board.id يحدد جيلاً للوحة. الإجراء اليدوي saleAdd قد يوفر boardId و spotId لتسجيل البيع وحجز تلك الخانة في عملية واحدة؛ وتُرفض المبيعات المرتبطة المكررة التي لا تزال في السجل الحديث. saleRemove مع reopenSpot: true يحرر تلك الخانة فقط إذا ظل جيل اللوحة مطابقاً. تحذف إدخالات المبيعات العامة حقول الربط الخاصة بالمشغّل هذه. الحقل الاختياري platform في عملية بيع يدوية يحافظ على مصدرها للتصفية، بينما source: "Host confirmed" يحدد طريقة التأكيد. amount هو إجمالي الإدخال، بما في ذلك quantity. الحقل الخاص بمحوّل الطلبات المدفوعة في eBay meta.ebayPurchase.quantity يُحتفظ به.

salesSettings.auctionSource يفعّل مساعد عناصر Whatnot أو eBay Live اختيارياً. الحقل الموجود في استجابة التحكم commerce.auction يتضمن فقط source وtitle وpriceText وstatus وat من أحدث عنصر ملتقط auction_update، أو null. تنتهي صلاحيته بعد خمس دقائق ويُمسح عند تغيير المصدر أو لقطة الخمول أو إعادة التشغيل. المساعد خاص بالمشغّل فقط: لا يُحفظ ولا يُدرج في بث الجمهور؛ وتُستبعد هوية المزايد أو الفائز. تبقى نصوص المصادر وبيانات أحداث المزاد دون تغيير. نسخ مسودة لا يؤكد الدفع أو ينشئ عملية بيع.