Twitch
دعم دردشة Twitch عبر اتصال IRC. يتصل OpenClaw كمستخدم Twitch (حساب بوت) لاستقبال وإرسال الرسائل في القنوات.
المكون الإضافي مطلوب
يتم توزيع Twitch كمكون إضافي ولا يتم تضمينه مع التثبيت الأساسي. قم بالتثبيت عبر سطر الأوامر (npm registry):
openclaw plugins install @openclaw/twitch
نسخة محلية (عند التشغيل من مستودع git):
openclaw plugins install ./extensions/twitch
التفاصيل: المكونات الإضافية
الإعداد السريع (للمبتدئين)
- أنشئ حساب Twitch مخصصًا للبوت (أو استخدم حسابًا موجودًا).
- إنشاء بيانات الاعتماد: منشئ رمز Twitch
- اختر رمز البوت (Bot Token)
- تحقق من تحديد النطاقات
chat:readوchat:write - انسخ معرف العميل (Client ID) و رمز الوصول (Access Token)
- ابحث عن معرف مستخدم Twitch الخاص بك: https://www.streamweasels.com/tools/convert-twitch-username-to-user-id/
- قم بتكوين الرمز:
- متغير البيئة:
OPENCLAW_TWITCH_ACCESS_TOKEN=...(الحساب الافتراضي فقط) - أو التكوين:
channels.twitch.accessToken - إذا تم تعيين كليهما، فإن التكوين له الأسبقية (الاحتياطي لمتغير البيئة للحساب الافتراضي فقط).
- متغير البيئة:
- ابدأ البوابة.
⚠️ مهم: أضف تحكمًا في الوصول (allowFrom أو allowedRoles) لمنع المستخدمين غير المصرح لهم من تشغيل البوت. requireMention تكون true افتراضيًا. التكوين الأدنى:
{
channels: {
twitch: {
enabled: true,
username: "openclaw", // حساب البوت على Twitch
accessToken: "oauth:abc123...", // رمز وصول OAuth (أو استخدم متغير البيئة OPENCLAW_TWITCH_ACCESS_TOKEN)
clientId: "xyz789...", // معرف العميل من منشئ الرمز
channel: "vevisk", // قناة Twitch التي يجب الانضمام إلى دردشتها (مطلوب)
allowFrom: ["123456789"], // (موصى به) معرف مستخدم Twitch الخاص بك فقط - احصل عليه من https://www.streamweasels.com/tools/convert-twitch-username-to-user-id/
},
},
}
ما هو
- قناة Twitch مملوكة للبوابة.
- التوجيه الحتمي: الردود تعود دائمًا إلى Twitch.
- كل حساب يعين إلى مفتاح جلسة معزول
agent:<agentId>:twitch:<accountName>. usernameهو حساب البوت (الذي يقوم بالمصادقة)،channelهي غرفة الدردشة التي يجب الانضمام إليها.
الإعداد (مفصل)
إنشاء بيانات الاعتماد
استخدم منشئ رمز Twitch:
- اختر رمز البوت (Bot Token)
- تحقق من تحديد النطاقات
chat:readوchat:write - انسخ معرف العميل (Client ID) و رمز الوصول (Access Token)
لا حاجة لتسجيل التطبيق يدويًا. تنتهي صلاحية الرموز بعد عدة ساعات.
تكوين البوت
متغير البيئة (الحساب الافتراضي فقط):
OPENCLAW_TWITCH_ACCESS_TOKEN=oauth:abc123...
أو التكوين:
{
channels: {
twitch: {
enabled: true,
username: "openclaw",
accessToken: "oauth:abc123...",
clientId: "xyz789...",
channel: "vevisk",
},
},
}
إذا تم تعيين كل من متغير البيئة والتكوين، فإن التكوين له الأسبقية.
التحكم في الوصول (موصى به)
{
channels: {
twitch: {
allowFrom: ["123456789"], // (موصى به) معرف مستخدم Twitch الخاص بك فقط
},
},
}
يفضل استخدام allowFrom لقائمة السماح الصارمة. استخدم allowedRoles بدلاً من ذلك إذا كنت تريد وصولًا قائمًا على الأدوار. الأدوار المتاحة: "moderator", "owner", "vip", "subscriber", "all". لماذا معرفات المستخدمين؟ يمكن أن تتغير أسماء المستخدمين، مما يسمح بانتحال الشخصية. معرفات المستخدمين دائمة. ابحث عن معرف مستخدم Twitch الخاص بك: https://www.streamweasels.com/tools/convert-twitch-username-%20to-user-id/ (تحويل اسم مستخدم Twitch الخاص بك إلى معرف)
تجديد الرمز (اختياري)
لا يمكن تجديد الرموز من منشئ رمز Twitch تلقائيًا - قم بإعادة توليدها عند انتهاء صلاحيتها. للتجديد التلقائي للرموز، أنشئ تطبيق Twitch الخاص بك في وحدة تحكم مطوري Twitch وأضفه إلى التكوين:
{
channels: {
twitch: {
clientSecret: "your_client_secret",
refreshToken: "your_refresh_token",
},
},
}
يقوم البوت تلقائيًا بتجديد الرموز قبل انتهاء صلاحيتها ويسجل أحداث التجديد.
دعم الحسابات المتعددة
استخدم channels.twitch.accounts مع رموز لكل حساب. راجع gateway/configuration للنمط المشترك. مثال (حساب بوت واحد في قناتين):
{
channels: {
twitch: {
accounts: {
channel1: {
username: "openclaw",
accessToken: "oauth:abc123...",
clientId: "xyz789...",
channel: "vevisk",
},
channel2: {
username: "openclaw",
accessToken: "oauth:def456...",
clientId: "uvw012...",
channel: "secondchannel",
},
},
},
},
}
ملاحظة: كل حساب يحتاج إلى رمز خاص به (رمز واحد لكل قناة).
التحكم في الوصول
قيود قائمة على الأدوار
{
channels: {
twitch: {
accounts: {
default: {
allowedRoles: ["moderator", "vip"],
},
},
},
},
}
قائمة السماح حسب معرف المستخدم (الأكثر أمانًا)
{
channels: {
twitch: {
accounts: {
default: {
allowFrom: ["123456789", "987654321"],
},
},
},
},
}
الوصول القائم على الأدوار (بديل)
allowFrom هي قائمة سماح صارمة. عند تعيينها، يُسمح فقط لهؤلاء المستخدمين. إذا كنت تريد وصولًا قائمًا على الأدوار، اترك allowFrom غير معيّن وقم بتكوين allowedRoles بدلاً من ذلك:
{
channels: {
twitch: {
accounts: {
default: {
allowedRoles: ["moderator"],
},
},
},
},
}
تعطيل شرط الإشارة @
افتراضيًا، requireMention تكون true. لتعطيلها والرد على جميع الرسائل:
{
channels: {
twitch: {
accounts: {
default: {
requireMention: false,
},
},
},
},
}
استكشاف الأخطاء وإصلاحها
أولاً، قم بتشغيل أوامر التشخيص:
openclaw doctor
openclaw channels status --probe
البوت لا يستجيب للرسائل
تحقق من التحكم في الوصول: تأكد من أن معرف المستخدم الخاص بك موجود في allowFrom، أو قم مؤقتًا بإزالة allowFrom وتعيين allowedRoles: ["all"] للاختبار. تحقق من أن البوت في القناة: يجب أن ينضم البوت إلى القناة المحددة في channel.
مشاكل الرمز
"فشل الاتصال" أو أخطاء المصادقة:
- تحقق من أن
accessTokenهو قيمة رمز وصول OAuth (تبدأ عادةً ببادئةoauth:) - تحقق من أن الرمز يحتوي على نطاقات
chat:readوchat:write - إذا كنت تستخدم تجديد الرمز، تحقق من تعيين
clientSecretوrefreshToken
تجديد الرمز لا يعمل
تحقق من السجلات لأحداث التجديد:
Using env token source for mybot
Access token refreshed for user 123456 (expires in 14400s)
إذا رأيت "تم تعطيل تجديد الرمز (لا يوجد رمز تجديد)":
- تأكد من توفير
clientSecret - تأكد من توفير
refreshToken
التكوين
تكوين الحساب:
username- اسم مستخدم البوتaccessToken- رمز وصول OAuth معchat:readوchat:writeclientId- معرف عميل Twitch (من منشئ الرمز أو تطبيقك)channel- القناة للانضمام إليها (مطلوب)enabled- تمكين هذا الحساب (افتراضي:true)clientSecret- اختياري: للتجديد التلقائي للرمزrefreshToken- اختياري: للتجديد التلقائي للرمزexpiresIn- انتهاء صلاحية الرمز بالثوانيobtainmentTimestamp- الطابع الزمني للحصول على الرمزallowFrom- قائمة السماح بمعرفات المستخدمينallowedRoles- التحكم في الوصول القائم على الأدوار ("moderator" | "owner" | "vip" | "subscriber" | "all")requireMention- يتطلب الإشارة @ (افتراضي:true)
خيارات المزود:
channels.twitch.enabled- تمكين/تعطيل بدء تشغيل القناةchannels.twitch.username- اسم مستخدم البوت (تكوين حساب واحد مبسط)channels.twitch.accessToken- رمز وصول OAuth (تكوين حساب واحد مبسط)channels.twitch.clientId- معرف عميل Twitch (تكوين حساب واحد مبسط)channels.twitch.channel- القناة للانضمام إليها (تكوين حساب واحد مبسط)channels.twitch.accounts.<accountName>- تكوين الحسابات المتعددة (جميع حقول الحساب أعلاه)
مثال كامل:
{
channels: {
twitch: {
enabled: true,
username: "openclaw",
accessToken: "oauth:abc123...",
clientId: "xyz789...",
channel: "vevisk",
clientSecret: "secret123...",
refreshToken: "refresh456...",
allowFrom: ["123456789"],
allowedRoles: ["moderator", "vip"],
accounts: {
default: {
username: "mybot",
accessToken: "oauth:abc123...",
clientId: "xyz789...",
channel: "your_channel",
enabled: true,
clientSecret: "secret123...",
refreshToken: "refresh456...",
expiresIn: 14400,
obtainmentTimestamp: 1706092800000,
allowFrom: ["123456789", "987654321"],
allowedRoles: ["moderator"],
},
},
},
},
}
إجراءات الأداة
يمكن للوكيل استدعاء twitch بالإجراء:
send- إرسال رسالة إلى قناة
مثال:
{
action: "twitch",
params: {
message: "Hello Twitch!",
to: "#mychannel",
},
}
السلامة والعمليات
- عامل الرموز مثل كلمات المرور - لا تضع الرموز في git أبدًا
- استخدم التجديد التلقائي للرموز للبوتات طويلة الأمد
- استخدم قوائم السماح بمعرفات المستخدمين بدلاً من أسماء المستخدمين للتحكم في الوصول
- راقب السجلات لأحداث تجديد الرمز وحالة الاتصال
- قلل نطاق الرموز - اطلب فقط
chat:readوchat:write - إذا علقت: أعد تشغيل البوابة بعد التأكد من عدم وجود عملية أخرى تمتلك الجلسة
الحدود
- 500 حرف لكل رسالة (يتم تقسيمها تلقائيًا عند حدود الكلمات)
- يتم إزالة Markdown قبل التقسيم
- لا يوجد تحديد لمعدل الإرسال (يستخدم الحدود المضمنة في Twitch)