منصات المراسلة

Twitch

دعم دردشة Twitch عبر اتصال IRC. يتصل OpenClaw كمستخدم Twitch (حساب بوت) لاستقبال وإرسال الرسائل في القنوات.

المكون الإضافي مطلوب

يتم توزيع Twitch كمكون إضافي ولا يتم تضمينه مع التثبيت الأساسي. قم بالتثبيت عبر سطر الأوامر (npm registry):

openclaw plugins install @openclaw/twitch

نسخة محلية (عند التشغيل من مستودع git):

openclaw plugins install ./extensions/twitch

التفاصيل: المكونات الإضافية

الإعداد السريع (للمبتدئين)

  1. أنشئ حساب Twitch مخصصًا للبوت (أو استخدم حسابًا موجودًا).
  2. إنشاء بيانات الاعتماد: منشئ رمز Twitch
    • اختر رمز البوت (Bot Token)
    • تحقق من تحديد النطاقات chat:read و chat:write
    • انسخ معرف العميل (Client ID) و رمز الوصول (Access Token)
  3. ابحث عن معرف مستخدم Twitch الخاص بك: https://www.streamweasels.com/tools/convert-twitch-username-to-user-id/
  4. قم بتكوين الرمز:
    • متغير البيئة: OPENCLAW_TWITCH_ACCESS_TOKEN=... (الحساب الافتراضي فقط)
    • أو التكوين: channels.twitch.accessToken
    • إذا تم تعيين كليهما، فإن التكوين له الأسبقية (الاحتياطي لمتغير البيئة للحساب الافتراضي فقط).
  5. ابدأ البوابة.

⚠️ مهم: أضف تحكمًا في الوصول (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:write
  • clientId - معرف عميل 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)

TlonWhatsApp