كيفية مسح الرسائل في الخلاف بسرعة. أفضل روبوتات الخلاف

  • ترجمة

يستمر Discord في النمو بشكل أسرع مما توقعنا ، كما هو الحال مع المحتوى الذي ينشئه المستخدمون. كلما زاد عدد المستخدمين - زاد عدد الرسائل في الدردشة. في تموز (يوليو) أعلنا عن 40 مليون رسالة في اليوم ، وفي كانون الأول (ديسمبر) أعلنا عن 100 مليون رسالة ، وفي منتصف كانون الثاني (يناير) تجاوزنا 120 مليونًا. قررنا على الفور تخزين محفوظات الدردشة إلى الأبد ، حتى يتمكن المستخدمون من العودة في أي وقت والوصول إلى بياناتهم من أي الأجهزة. هذه كمية كبيرة من البيانات ، يتزايد تدفقها وحجمها ، ويجب أن تكون جميعها متاحة. كيف لنا أن نفعل ذلك؟ كاساندرا!

ماذا فعلنا

تمت كتابة النسخة الأصلية من Discord في أقل من شهرين في أوائل عام 2015. ربما تكون MongoDB واحدة من أفضل قواعد البيانات للتكرار السريع. تم تخزين كل شيء في Discord على وجه التحديد في مجموعة نسخة واحدة من MongoDB ، لكننا كنا أيضًا نعد كل شيء لترحيل بسيط إلى نظام DBMS جديد (كنا نعلم أننا لن نستخدم طريقة MongoDB التجزئة نظرًا لتعقيدها واستقرارها غير المعروف). إنها في الواقع جزء من ثقافة شركتنا: التصميم سريعًا للاختبار ميزة جديدةالمنتج ، ولكن يتجهون دائمًا إلى حل أكثر موثوقية.

تم تخزين الرسائل في مجموعة MongoDB مع فهرس مركب واحد على channel_id و created_at. في حوالي نوفمبر 2015 ، وصلنا إلى 100 مليون رسالة في قاعدة البيانات ، ثم بدأنا في فهم المشاكل التي تنتظرنا: البيانات والفهرس لم يعد مناسبًا في ذاكرة الوصول العشوائي ، وأصبحت التأخيرات غير متوقعة. حان الوقت للانتقال إلى نظام DBMS أكثر ملاءمة.

اختيار نظم إدارة قواعد البيانات الصحيحة

قبل اختيار DBMS جديد ، كنا بحاجة إلى فهم أنماط القراءة / الكتابة المتاحة وسبب وجود مشاكل في الحل الحالي.
  • سرعان ما أصبح واضحًا أن القراءات كانت عشوائية للغاية ، وكانت نسب القراءة / الكتابة حوالي 50/50.
  • خوادم الدردشة الصوتية الثقيلة Discord لم ترسل أي رسائل تقريبًا. أي أنهم أرسلوا رسالة أو رسالتين كل بضعة أيام. في غضون عام ، من غير المحتمل أن يصل خادم من هذا النوع إلى الحد الفاصل وهو 1000 رسالة. تكمن المشكلة في أنه حتى مع وجود مثل هذا العدد القليل من الرسائل ، يصعب تسليم هذه البيانات للمستخدمين. ببساطة ، يمكن أن تؤدي إعادة 50 رسالة إلى المستخدم إلى العديد من عمليات البحث العشوائية عن القرص ، مما يؤدي إلى تدفق ذاكرة التخزين المؤقت على القرص.
  • ترسل خوادم الدردشة النصية الخاصة ذات الوزن الثقيل Discord كمية مناسبة من الرسائل ، وتقع بسهولة في النطاق بين 100 ألف و 1 مليون رسالة في السنة. عادة ما يطلبون فقط أحدث البيانات. المشكلة هي أن هذه الخوادم عادة ما تحتوي على أقل من 100 عضو ، وبالتالي فإن معدل طلب البيانات بطيء ومن غير المحتمل أن يكون في ذاكرة التخزين المؤقت على القرص.
  • ترسل خوادم Discord العامة الكبيرة الكثير من الرسائل. هناك آلاف الأعضاء يرسلون آلاف الرسائل يوميًا. تتم كتابة ملايين الرسائل سنويًا بسهولة. يطلبون دائمًا الرسائل المرسلة في آخر ساعة ، وهذا يحدث كثيرًا. لذلك ، عادة ما تكون البيانات في ذاكرة التخزين المؤقت على القرص.
  • كنا نعلم أنه في العام المقبل ، سيكون لدى المستخدمين المزيد من الطرق لإنشاء قراءات عشوائية: القدرة على عرض إشاراتهم في آخر 30 يومًا ثم الانتقال إلى تلك اللحظة في التاريخ ، وعرض المنشورات اللاصقة والانتقال إليها ، و البحث عن نص كامل. كل هذا يعني المزيد من القراءات العشوائية!
ثم حددنا متطلباتنا:
  • قابلية التوسع الخطي- لا نريد مراجعة القرار لاحقًا أو نقل البيانات يدويًا إلى جزء آخر.
  • تجاوز الفشل التلقائي- نحب النوم ليلاً ونجعل الفتنة شفاءً ذاتيًا قدر الإمكان.
  • القليل من الدعم- يجب أن يعمل بمجرد تثبيته. نحن مطالبون فقط بإضافة المزيد من العقد مع نمو البيانات.
  • ثبت في العملنحن نحب تجربة التقنيات الجديدة ، لكنها ليست جديدة جدًا.
  • أداء يمكن التنبؤ به- يتم إرسال الرسائل إلينا إذا تجاوز وقت استجابة API 80 مللي ثانية في 95٪ من الحالات. لا نريد أيضًا مواجهة الحاجة إلى التخزين المؤقت للرسائل في Redis أو Memcached.
  • لا تخزين البيانات الثنائية الكبيرة- لن تعمل كتابة آلاف الرسائل في الثانية بشكل رائع إذا اضطررنا إلى إلغاء تسلسل النقاط الكبيرة باستمرار وإرفاق البيانات بها.
  • المصدر المفتوح- نعتقد أننا نتحكم في مصيرنا ، ولا نريد الاعتماد على شركة خارجية.
تبين أن Cassandra هي DBMS الوحيد الذي يلبي جميع متطلباتنا. يمكننا فقط إضافة العقد أثناء القياس ، وهو يعالج فقدان العقد دون أي تأثير على التطبيق. تمتلك الشركات الكبيرة مثل Netflix و Apple الآلاف من عقد Cassandra. يتم تخزين البيانات المرتبطة جنبًا إلى جنب على القرص ، مما يضمن حدًا أدنى من عمليات البحث والتوزيع السهل عبر الكتلة. يتم الحفاظ عليها بواسطة DataStax ، ولكن يتم توزيعها علانية. مصدر الرمزوقوى المجتمع.

بعد الاختيار ، كان من الضروري إثبات أنه كان له ما يبرره حقًا.

نمذجة البيانات

أفضل طريقة لوصف كاساندرا للمبتدئين هي اختصار KKV. يحتوي الحرفان "K" على المفتاح الأساسي. أول "K" هو مفتاح التقسيم. يساعد في تحديد العقدة التي تعيش فيها البيانات ومكان العثور عليها على القرص. يوجد العديد من الصفوف داخل القسم ، ويتم تحديد صف معين داخل القسم بواسطة "K" الثاني - مفتاح التجميع. يعمل كمفتاح أساسي داخل القسم ويحدد كيفية فرز الصفوف. يمكنك التفكير في القسم باعتباره قاموسًا مرتبًا. كل هذه الصفات مجتمعة تسمح بنمذجة بيانات قوية للغاية.

تذكر أن الرسائل في MongoDB تمت فهرستها باستخدام channel_id و created_at؟ أصبح معرف القناة مفتاح قسم حيث أن جميع الرسائل تعمل في قناة ، ولكن لا يتم إنشاؤها مفتاح جيدالتجميع لأنه يمكن إنشاء رسالتين في نفس الوقت. لحسن الحظ ، يتم إنشاء كل معرف موجود على Discord في الواقع في Snowflake ، مما يعني أنه تم فرزها ترتيبًا زمنيًا. حتى يمكن استخدامها. أصبح المفتاح الأساسي (channel_id ، message_id) حيث message_id هو Snowflake. هذا يعني أنه عندما يتم تحميل القناة ، يمكننا إخبار Cassandra عن النطاق الدقيق للبحث عن الرسائل.

فيما يلي مخطط مبسط لجدول الرسائل الخاص بنا (يتخطى حوالي 10 أعمدة).

إنشاء رسائل جدول (معرف القناة ، رقم تعريف الرسالة ، رقم تعريف المؤلف ، نص المحتوى ، المفتاح الأساسي (معرف القناة ، معرف الرسالة)) مع ترتيب المجموعات حسب (message_id DESC) ؛
بينما تشبه مخططات Cassandra مخططات قواعد البيانات العلائقية ، فمن السهل تغييرها دون أي تأثير مؤقت على الأداء. لقد أخذنا أفضل ما في تخزين البيانات الثنائية الكبيرة والتخزين العلائقي.

بمجرد بدء استيراد الرسائل الموجودة إلى Cassandra ، رأينا على الفور تحذيرات في السجلات تفيد بأنه تم العثور على أقسام أكبر من 100 ميغابايت. ياه ؟! بعد كل شيء ، تدعي كاساندرا أنها تدعم أقسام 2 جيجا بايت!على ما يبدو ، فإن الاحتمال بحد ذاته لا يعني أنه ينبغي القيام بذلك. تضع الأقسام الكبيرة عبئًا ثقيلًا على جامع القمامة في كاساندرا عند الضغط وتوسيع الكتلة وما إلى ذلك. وجود قسم كبير يعني أيضًا أن البيانات الموجودة فيه لا يمكن توزيعها عبر الكتلة. أصبح من الواضح أنه سيتعين علينا تحديد حجم الأقسام بطريقة أو بأخرى ، لأن بعض قنوات Discord يمكن أن توجد لسنوات ويزداد حجمها باستمرار.

قررنا توزيع رسائلنا في مجموعات (مجموعات) بمرور الوقت. نظرنا إلى أكبر القنوات في Discord وقررنا أنه إذا قمنا بتخزين الرسائل في مجموعات من حوالي 10 أيام ، فسوف نلائم بشكل مريح حد 100 ميغابايت. يجب الحصول على الكتل من message_id أو timestamp.

DISCORD_EPOCH = 1420070400000 BUCKET_SIZE = 1000 * 60 * 60 * 24 * 10 def make_bucket (ندفة الثلج): إذا كانت ندفة الثلج بلا: timestamp = int (time.time () * 1000) - DISCORD_EPOCH وإلا: # عند إنشاء ندفة الثلج ، فإنها تحتوي على عدد الثواني # منذ DISCORD_EPOCH. timestamp = snowflake_id >> 22 Return int (timestamp / BUCKET_SIZE) def make_buckets (start_id، end_id = None): نطاق الإرجاع (make_bucket (start_id)، make_bucket (end_id) + 1)
يمكن أن تكون مفاتيح أقسام Cassandra مركبة ، لذا فإن مفتاحنا الأساسي الجديد هو ((معرف القناة ، دلو) ، message_id).

إنشاء رسائل جدول (channel_id bigint ، bucket int ، message_id bigint ، author_id bigint ، content text ، PRIMARY KEY ((channel_id ، bucket) ، message_id)) مع CLUSTERING ORDER BY (message_id DESC) ؛
للاستعلام عن الرسائل الأخيرة في قناة ما ، أنشأنا نطاقًا من الكتل من الوقت الحالي إلى معرف القناة (يتم أيضًا فرزها ترتيبًا زمنيًا مثل Snowflake ويجب أن تكون أقدم من الرسالة الأولى). ثم نقوم باستقصاء الأقسام بالتسلسل حتى نجمع ما يكفي من الرسائل. الجانب الخلفيمثل هذه الطريقة هي أنه في بعض الأحيان ، سيتعين على مثيلات Discord النشطة أن تستقصي العديد من الكتل المختلفة من أجل جمع رسائل كافية بمرور الوقت. من الناحية العملية ، اتضح أن كل شيء على ما يرام ، لأنه بالنسبة لمثيل Discord النشط ، عادة ما تكون هناك رسائل كافية في القسم الأول ، ومعظمها كذلك.

سار استيراد الرسائل إلى كاساندرا بسلاسة وكنا مستعدين لتجربتها في الإنتاج.

إطلاق مكثف

انتاج نظام جديددائمًا ما يكون الإنتاج مخيفًا ، لذلك من الجيد اختباره دون التأثير على المستخدمين. قمنا بتكوين النظام لنسخ عمليات القراءة / الكتابة في MongoDB و Cassandra.

بعد الإطلاق مباشرة ، أظهر متتبع الأخطاء أخطاءً تشير إلى أن معرّف المؤلف صفر. كيف يمكن أن يكون لاغيا؟ هذا مجال مطلوب!

الاتساق في النهاية

Cassandra هو نظام نوع ، أي أنه يتم التضحية بالنزاهة المضمونة هنا من أجل إمكانية الوصول ، وهو ما أردناه بشكل عام. لا يشجع Cassandra القراءة قبل الكتابة (عمليات القراءة أكثر تكلفة) ولذا فإن كل ما تفعله Cassandra هو تحديث ورفع مستوى ، حتى لو تم توفير أعمدة معينة فقط. يمكنك أيضًا الكتابة إلى أي عقدة وستقوم تلقائيًا بحل التعارضات باستخدام دلالات "آخر عملية تفوز بالكتابة" لكل عمود. فكيف يؤثر هذا علينا؟


مثال على حالة العرق تعديل / حذف

في حالة قيام المستخدم بتحرير منشور بينما كان مستخدم آخر يحذف نفس المنشور ، فسننتهي بصف يحتوي على بيانات مفقودة تمامًا ، باستثناء المفتاح الأساسي والنص ، لأن Cassandra تسجل التحديثات والإدخالات فقط. هناك نوعان من الحلول الممكنة لهذه المشكلة:

  1. أعد كتابة الرسالة بأكملها أثناء تحرير الرسالة. ثم هناك إمكانية القيامة الرسائل المحذوفةويضيف فرص التعارض للإدخالات المتزامنة في الأعمدة الأخرى.
  2. تحديد الرسالة التالفة وإزالتها من قاعدة البيانات.
اخترنا الخيار الثاني من خلال تحديد العمود المطلوب (في هذه الحالة author_id) وحذف المنشور إذا كان فارغًا.

أثناء حل هذه المشكلة ، لاحظنا أننا غير فعالين تمامًا في عمليات الكتابة. نظرًا لأن Cassandra متسقة في النهاية ، فلا يمكنها المضي قدمًا وحذف البيانات على الفور. يحتاج إلى نسخ عمليات الحذف إلى العقد الأخرى ، ويجب القيام بذلك حتى إذا كانت العقد غير متاحة مؤقتًا. تتعامل كاساندرا مع هذا من خلال مساواة الحذف بشكل غريب من السجل يسمى "علامة مميزة". أثناء عملية القراءة ، يتخطى ببساطة "شواهد القبور" التي تمت مواجهتها على طول الطريق. يمكن تكوين عمر "شواهد القبور" (افتراضيًا ، 10 أيام) ، وتتم إزالتها نهائيًا أثناء ضغط القاعدة ، إذا انتهت صلاحية المصطلح.

إن حذف عمود وكتابة الصفر في عمود هما نفس الشيء تمامًا. في كلتا الحالتين ، يتم إنشاء "شاهد القبر". نظرًا لأن جميع عمليات الكتابة في Cassandra عبارة عن تحديثات وإدخالات ، فإنك تقوم بإنشاء علامة مميزة حتى لو كتبت صفرًا في البداية. من الناحية العملية ، يتألف تخطيط رسالتنا الكامل من 16 عمودًا ، ولكن الرسالة المتوسطة تحتوي على 4 قيم فقط. سجلنا 12 شاهدة في كاساندرا ، عادة بدون سبب. كان حل المشكلة بسيطًا: اكتب فقط القيم غير الصفرية في قاعدة البيانات.

أداء

من المعروف أن كاساندرا في الكتابة أسرع من القراءة ، وهذا بالضبط ما لاحظناه. حدثت عمليات الكتابة في الفاصل الزمني أقل من مللي ثانية ، وعمليات القراءة - أقل من 5 مللي ثانية. وقد لوحظت هذه المعدلات بغض النظر عن نوع البيانات التي تم الوصول إليها. ظل الأداء دون تغيير طوال أسبوع الاختبار. لا عجب ، لقد حصلنا بالضبط على ما كنا نتوقعه.


تأخير القراءة / الكتابة ، وفقًا للبيانات الواردة من السجل

تماشياً مع أداء القراءة السريع والموثوق ، إليك مثال على الانتقال إلى رسالة عمرها عام في قناة بها ملايين الرسائل:

مفاجأة كبيرة

سار كل شيء بسلاسة ، لذلك طرحنا Cassandra كقاعدة بيانات رئيسية وأوقفنا خدمة MongoDB في غضون أسبوع. واصلت العمل بلا عيب ... لنحو 6 أشهر ، حتى توقفت عن الاستجابة ذات يوم.

لاحظنا أن Cassandra ستتوقف بشكل مستمر لمدة 10 ثوانٍ أثناء جمع القمامة ، لكننا لم نتمكن من معرفة السبب. بدأنا الحفر ووجدنا قناة Discord التي استغرق تحميلها 20 ثانية. كان الجاني هو خادم Discord العام الخاص بـ Puzzles & Dragons subreddit. نظرًا لأنه عام ، انضممنا إلى المشاهدة. لدهشتنا ، كانت هناك رسالة واحدة فقط على القناة. في تلك اللحظة ، أصبح من الواضح أنهم حذفوا ملايين الرسائل من خلال واجهات برمجة التطبيقات الخاصة بنا ، تاركين رسالة واحدة فقط لكل قناة.

إذا كنت تقرأ بعناية ، فتذكر كيف تتعامل كاساندرا مع عمليات الحذف باستخدام "شواهد القبور" (المذكورة في فصل "الاتساق النهائي"). عندما يقوم مستخدم بتحميل هذه القناة ، على الرغم من وجود رسالة واحدة فقط ، يتعين على Cassandra مسح ملايين شواهد القبور بكفاءة. ثم يقوم بتوليد القمامة بشكل أسرع من قدرة JVM على جمعها.

لقد حللنا هذه المشكلة بالطريقة التالية:

  • تم تقليل العمر الافتراضي لشواهد القبور من 10 أيام إلى يومين لأننا نجري عملية إصلاح كاساندرا (عملية مكافحة الانتروبيا) كل مساء على مجموعة الرسائل الخاصة بنا.
  • تم تغيير كود الطلب لتتبع الكتل الفارغة في القناة وتجنبها في المستقبل. هذا يعني أنه إذا بدأ المستخدم هذا الطلب مرة أخرى ، ففي أسوأ الحالات ، ستقوم Cassandra بفحص الكتلة الأخيرة فقط.

مستقبل

في هذه اللحظةلدينا مجموعة مكونة من 12 عقدة تعمل بعامل مندوب 3 وسوف نستمر في إضافة المزيد من عقد كاساندرا حسب الحاجة. نعتقد أن هذا النهج يعمل على المدى الطويل ، ولكن مع نمو Discord ، يبدو أنه مستقبل بعيد حيث يتعين علينا حفظ مليارات الرسائل يوميًا. تدير Netflix و Apple مجموعات بها مئات العقد ، لذلك ليس لدينا ما يدعو للقلق في الوقت الحالي. ومع ذلك ، أود أن يكون لدي بعض الأفكار في الاحتياط.

المستقبل القريب

  • قم بترقية مجموعة رسائلنا من Cassandra 2 إلى Cassandra 3. يمكن أن يقلل تنسيق التخزين الجديد في Cassandra 3 التخزين بأكثر من 50٪.
  • تعد الإصدارات الأحدث من Cassandra أفضل في التعامل مع المزيد من البيانات في كل عقدة. نقوم حاليًا بتخزين ما يقرب من 1 تيرابايت من البيانات المضغوطة في كل منها. نعتقد أنه من الآمن تقليل عدد العقد في الكتلة عن طريق زيادة هذا الحد إلى 2 تيرابايت.

المستقبل البعيد

  • Learn Scylla هو نظام DBMS متوافق مع Cassandra مكتوب بلغة C ++. في التشغيل العادي ، تستهلك عُقد Cassandra بالفعل القليل من موارد وحدة المعالجة المركزية ، ومع ذلك ، خلال ساعات خارج الذروة أثناء إصلاح Cassandra (عملية الانتروبيا المضادة) ، فهي تعتمد تمامًا على وحدة المعالجة المركزية ، ويزيد وقت الإصلاح اعتمادًا على كمية البيانات المكتوبة منذ الإصلاح الأخير. يعد Scylla بزيادة سرعة الإصلاحات بشكل كبير.
  • أنشئ نظامًا لأرشفة الخلاصات غير المستخدمة في Google Cloud Storage وإعادة تحميلها عند الطلب. نريد تجنبه ولا نعتقد أنه يتعين علينا القيام بذلك.

استنتاج

لقد مر أكثر من عام على الانتقال إلى كاساندرا ورغم ذلك "مفاجأة كبيرة"كانت سباحة هادئة. لقد انتقلنا من أكثر من 100 مليون رسالة إجمالية إلى أكثر من 120 مليون رسالة يوميًا مع الحفاظ على الأداء والاستقرار.

نظرًا لنجاح هذا المشروع ، قمنا منذ ذلك الحين بترحيل جميع بياناتنا الأخرى في الإنتاج إلى Cassandra ، بنجاح أيضًا.

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

ما زلنا لا نملك مهندسين متخصصين في DevOps (أربعة مهندسين فقط للخلفية) ، لذلك من الرائع حقًا أن يكون لديك نظام لا داعي للقلق بشأنه. نحن نوظف ، لذا تواصل معنا إذا كانت هذه الألغاز تدغدغ خيالك.

العلامات: إضافة العلامات

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

مفهوم الدردشة

تشير الدردشة في Discord إلى القنوات الفردية. وهم بدورهم ، حسب نوع طرق الاتصال المستخدمة ، مقسمون إلى صوت ونص.

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

مسح الدردشة في الخلاف

يجب أن يقال على الفور أن التطبيق لا يوفر للمستخدمين أدوات لحذف جميع الرسائل المتراكمة في القناة على الفور. الحذف ممكن فقط للسجلات الفردية (الرسائل). ومع ذلك ، هناك طريقة واحدة لتسريع عملية التنظيف. نحن نتحدث عن مصطلح مثل "رد الفعل" ، أي رد المشاركين الآخرين في المحادثة على الرسائل المنشورة.

لحذف جميع ردود الفعل المتوفرة في الدردشة ، يتم توفير الإجراء التالي:

  • قم بتسجيل الدخول إلى برنامج Discord ؛
  • حدد قناة الاهتمام ؛
  • على الجانب الأيمن من الرسالة المحددة ، انقر فوق رمز "النقطتين" ؛
  • حدد "إزالة جميع ردود الفعل" من القائمة المنسدلة.

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

هذا يتطلب:

  • تسجيل الدخول إلى التطبيق ؛
  • حدد قناة الاهتمام ؛
  • مقابل كل رسالة ، انقر على أيقونة "القولون" ؛
  • حدد خيار "حذف" من القائمة المنسدلة.

يمكنك أيضًا حذفه من خلال تمييز نص الرسالة بالمفتاح الأيمن ثم النقر فوق خيار الإجراء المقترح "حذف".

في حالة اختفاء الحاجة إلى قناة ، يمكن ببساطة حذفها ، وسيتطلب ذلك بضع ضغطات على المفاتيح. يتطلب هذا مجموعة الخطوات التالية:

  • تسجيل الدخول إلى التطبيق ؛
  • حدد قناة الاهتمام ؛
  • انتقل إلى قسم "القائمة" أو انقر بزر الماوس الأيمن ؛
  • من قائمة الإجراءات المقترحة ، حدد خيار "حذف القناة".

وبالتالي ، من الممكن حذف القناة نفسها والسجلات الموجودة فيها. دع الإجراء الأخير يتطلب بعض الوقت الضائع.

عن البرنامج نفسه

تم تصميم برنامج Discord للتنظيم التواصل الصوتي لاعبي اللعبة على الإنترنت. بالطبع ، تقدم الخدمة أيضًا إمكانيات اتصال نصية قياسية ، ولكن يجب التعرف على ذلك من حيث المستوى وظائفالقنوات النصية للتطبيق أدنى من برامج المراسلة. يجب الاعتراف بأن مشروع Discord يستهدف بشكل أساسي جمهور الألعاب.

بعد إنشاء خادم Discord الخاص بك ، قد يكون لدى العديد من المبتدئين أسئلة مختلفة بخصوص إدارة الخادم. قد يكون أحد هذه الأسئلة "كيف تحذف جميع الرسائل في Discord؟". يمكن طرح هذا السؤال لأسباب عديدة: من حذف رسالة غير ضرورية إلى مسح قاعدة البيانات بأكملها من أعين المتطفلين.

احذف محادثة في Discord

لسوء الحظ ، لم يوفر المطورون إمكانية كيفية حذف جميع الرسائل في Discord في وقت واحد. لكن لا تنزعج! توجد طرق عديدة للتحايل الجزئي على هذا الحظر.

الطريقة الأولى: حذف محادثة برسالة واحدة

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


الطريقة 2: حذف جميع الرسائل في Discord عن طريق حذف الدردشة

حذف المراسلات مع هذه الطريقةيمكن القيام به بسرعة إلى حد ما. الشيء السلبي الوحيد هو أنك ستحتاج إلى إعادة إنشاء القناة وتعيين إعداداتها. الميزة الرئيسية - تسمح لك بحذف جميع الرسائل المخزنة في Discord على القناة المحددة.


تذكر أن Discord رسميًا لا يتعرف على مفاهيم مثل المجموعة أو الدردشة. غالبًا ما يتم فهمها على أنها مكان يمكنك من خلاله إجراء اتصالات جماعية. فقط في Discord تسمى هذه الأماكن بشكل مختلف قليلاً - القنوات. في هذه الحالة ، يمكن أن تكون القنوات من نوعين: نص وصوت. يفضل الكثير من الناس تطبيق Discord لأنه يسمح للمشاركين بالتواصل في عدة قنوات نصية في نفس الوقت دون مغادرة القناة الصوتية.

الطريقة الثالثة: حذف محادثة الفتنة باستخدام ردود الفعل

من المستحيل حذف جميع الرسائل في Discord باستخدام ردود الفعل ، فهي وحدها تساعد في إدارة بعض العمليات.

على سبيل المثال ، هناك روبوت مفيد يسمح لك بإضافة استطلاعات الرأي إلى خادم Discord ، ويتألف من ما يصل إلى تسع إجابات. بمساعدة ردود الفعل ، يمكنك معرفة خيارات الإجابة التي تم تحديدها تعريف المستخدموكذلك إزالتها. في البداية ، كانت ردود الفعل مخصصة للرموز التعبيرية.


الطريقة الرابعة: حذف الرسائل من الأسبوع الماضي

هناك أيضًا مكان لقضاء بعض الوقت فيه بطريقة جذريةلمسح الرسائل. ومع ذلك ، فإنه يسمح لك بحذف جميع الرسائل في Discord من آخر 7 أيام.

تجدر الإشارة إلى أن هذه الطريقة مناسبة فقط إذا كنت بحاجة إلى محو رسائل مستخدم فردي ، وليس محو الدردشة بالكامل.


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

الطريقة الخامسة: Mee6 Bot

على الرغم من أن Discord لا يسمح لك بحذف جميع الرسائل ، إلا أن هناك طريقة لحذف ما يصل إلى 100 رسالة في وقت واحد. للقيام بذلك ، تحتاج فقط إلى تثبيت روبوت Mee6 إضافي. تجدر الإشارة إلى أن هذه هي الطريقة الأسهل والأسرع التي تسمح لك بحذف المراسلات.

في جوهره ، Mee6 هو روبوت موسيقي ، لكن لديه العديد من الميزات المفيدة.

  1. الخطوة الأولى هي إضافة الروبوت إلى الخادم الخاص بك. اتبع هذا الرابط .
  2. الأمر Run " أضف إلى الفتنة».
  3. تخويل الروبوت Mee6.
  4. بعد ذلك ، تحتاج إلى تحديد الخادم الذي سيهيمن عليه Mee6.
  5. في النافذة التالية ، يمكنك تعيين الحقوق التي ستكون متاحة للروبوت المضاف.
  6. بعد النقر فوق "تخويل" ، تأكد من أنك لست برنامج روبوت.
  7. بعد إضافة الروبوت إلى الخادم ، سيتم فتح نافذة حيث يجب عليك تعيين التكوين والمعلمات الخاصة بالروبوت. على سبيل المثال ، تم تضمين العديد من المكونات الإضافية. واحد منهم هو المساعدة.
  8. لتفعيل التغييرات ، حدد المربع وانقر فوق " تحديث"، بمعنى آخر. تحديث.
  9. للتحقق من عمل الأمر ، أرسل رسالة! تعليمات على الخادم في أي من الدردشات.
  10. بعد ذلك ، يجب أن يأتي وصف النقاط المختلفة للإضافات في رسالة شخصية من الروبوت.
  11. سيتضح من المنشور الداعم لـ Mee6 أن مجموعة الأوامر الخاصة بحذف المنشورات يمكن أن تحتوي على المكون الإضافي "المنسق". في نافذة تحرير تكوين الروبوت ، انقر على اللون البرتقالي البيضاوي مع التسمية التوضيحية "معطل" بجوار قسم "المنسق".
  12. قم بتأكيد إضافة المكون الإضافي.
  13. لاحظ تضمين الأمر! Clear وحفظ التغييرات مع عملية "Update". يسمح لك الأمر! clear xx بحذف ما يصل إلى 100 رسالة في المرة الواحدة ، حيث تحتاج بدلاً من xx إلى إضافة عدد الرسائل المراد حذفها.
  14. أرسل رسالة باستخدام الأمر! clear 50.
  15. هذا يعني أنه سيتم حذف آخر 50 رسالة من الدردشة. يبدأ العد التنازلي للرسائل المحذوفة من نهاية المراسلات ، أي يتم حذف الرسائل الجديدة الأولى ، ثم يتم حذف الرسائل القديمة فقط.

خوارزمية الإجراءات التي تتيح لك حذف المراسلات من خلال الواجهة هاتف محمول، تشبه تمامًا العمليات التي يتم إجراؤها. هذا هو السبب في أننا لن نوضح لهم.

أصبح Discord مكانًا للقاء للاعبين في جميع أنحاء الإنترنت. بغض النظر عن اللعبة التي تلعبها ، فإن Discord لديها مجتمع لها. بالنظر إلى عدد اللاعبين حول العالم الذين يستخدمون هذا البرنامج ، فليس من المستغرب أن تزداد شعبية روبوتات Discord.

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

روبوتات الموسيقى

يمكن لأي خادم استخدام برامج الروبوت الموسيقية. في الواقع ، تتمتع برامج الروبوت الموسيقية بشعبية كبيرة لدرجة أن هناك قسمًا كاملاً مخصصًا لها على صفحة Discord bots. هناك الكثير من الروبوتات الموسيقية الموجودة هناك ، ولكن اثنين من أفضلها هما Erisbot و Pancake.

Erisbot بديهي وسهل الاستخدام. يعمل البرنامج مثل مشغل الموسيقى، ويتضمن العديد من الميزات المشابهة لجهاز iPod. يمكنك حتى استخدام البرنامج بشكل مستقل. بالإضافة إلى ذلك ، فإنه يحتوي على صور مضحكة والبحث المدمج في قاموس العامية الحضرية.

Pancake مختلفة قليلاً وتقدم فقط بعض الميزات. إنه يعمل مثل روبوت موسيقى مشابه لـ ErisBot ، وإن كان ذلك مع عدد أقل من الإعدادات والخيارات. ومع ذلك ، فإنه يحتوي أيضًا على بعض الصور والألعاب وخيارات التعديل. إنها تفعل القليل من كل شيء وهي أداة رائعة لاستخدامها إذا كنت تريد روبوتًا غنيًا بميزة واحدة ولا تريد إضافة العديد من الميزات المختلفة.

بوتات المشرف

بالإضافة إلى Pancake ، هناك العديد من روبوتات الإشراف. يمكن أن يكون الإشراف التلقائي مفيدًا جدًا عند إدارة خادم Discord عام ، خاصة إذا كنت تريد الحفاظ على ترتيب لغة ومحتوى الدردشات.

مثل Pancake ، يعد Dyno روبوتًا غنيًا بالميزات. مثل Pancake ، يمكنها تشغيل الموسيقى ، لكن وظيفتها الرئيسية هي الاعتدال. على عكس معظم برامج الروبوت ، يتمتع Dyno بالإشراف التلقائي ورسائل الترحيب ، بحيث يمكنه إدارة قناة كاملة دون الحاجة إلى وجود مشرفين في الدردشة طوال الوقت.

في حين أن Dyno هو روبوت غني بالميزات ، فقد تم تصميم Auttaja بشكل حصري تقريبًا للاعتدال. في الوقت نفسه ، فإن إمكانات Auttaja ضخمة. بالإضافة إلى الإشراف التلقائي على الدردشات ، يمكن للبوت أيضًا تنسيق العمليات المنهجية مثل أسماء المستخدمين والعقوبات.

روبوتات الألعاب / الترفيه

بعض الروبوتات الأكثر شيوعًا هي الألعاب التفاعلية أو برامج الترفيه. أشهر روبوتين في هذه الفئة هما Pokecord و Dank Memer.

Pokecord هي لعبة تفاعلية لطيفة تخلق أساسًا مغامرة نصية Pokemon في قناتك. إنها طريقة ممتعة وسهلة لإشراك أعضاء Discord في اللعبة.

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

لا يمكن العثور على الروبوت الصحيح - قم بإنشاء الروبوت الخاص بك!

على الرغم من وجود المئات من روبوتات Discord ، ولكل منها إعداداتها الفريدة ومجموعة كبيرة من الأوامر ، فقد لا تجد واحدة مصممة وفقًا لاحتياجاتك الخاصة. أو ربما تريد فقط أن يكون لديك التخصيص الكاملاو اكثر وصول محدودإلى الروبوت. على أي حال ، هناك عدة طرق لإنشاء روبوت خاص بك ، لكننا سنركز على أبسط الطرق وأكثرها فعالية:

أول شيء عليك القيام به هو تسجيل الدخول إلى Discord ، والذهاب إلى صفحة التطبيقات والنقر فوق "إنشاء تطبيق".

ثم أضف اسم تطبيق (وصورة رمزية إذا كنت تريد) ، وانقر على "بوت" في اللوحة على الجانب الأيسر. في نفس المكان ، انقر على "إضافة بوت" ("إضافة بوت"). سترى بعد ذلك نافذة منبثقة تسألك عما إذا كنت تريد المتابعة ، انقر فوق "نعم".

من هنا يمكنك تحديد صلاحياتك الخاصة. يمكن تخصيص هذا وفقًا لتفضيلاتك. تحت اسم مستخدم الروبوت ، يجب أن يظهر الآن قسم يسمى "الرمز المميز". أسفله ، انقر على رابط "انقر للكشف عن الرمز المميز". انسخ رمز الرمز المميز ، ستحتاج إليه لاحقًا

ثم انقر فوق "OAuth2" على الجانب الأيسر. هنا يجب تحديد البرنامج الذي تقوم بإنشائه. انقر فوق "Bot" ثم انسخ عنوان URL الذي سيتم عرضه. سيتم نقلك إلى صفحة حيث يمكنك إضافة الروبوت إلى أي من الخوادم التي تديرها. بعد ذلك ، حدد الخادم الذي تريد إضافة الروبوت إليه.

هنا سوف تحتاج إلى نوع من برامج الترميز وبعض المعرفة للاستفادة الكاملة من الروبوت. لتنشيط الروبوت ، سوف تحتاج محرر النص، مثل NotePad ، وأداة تشفير مثل JavaScript. ستحتاج إلى أخذ الرمز الذي تلقيته مسبقًا وحفظه كمستند NotePad في مجلد لبرنامج الروبوت الخاص بك. يجب تسمية هذا المستند باسم "auth.json" ويجب كتابته على النحو التالي:

الرمز المميز:

ستحتاج إلى إنشاء ملفين آخرين لتشغيل الروبوت الخاص بك. يجب حفظ واحد كـ package.json مع الكود التالي:

"الاسم": "برنامج الترحيب"،

"الإصدار": "1.0.0"،

"وصف": ""،

"main": "bot.js" ،

"مؤلف": ""،

التبعيات: ()

للحصول على الرمز الأخير ، أنشئ ملفًا وأطلق عليه اسم "bot.js." هنا يجب عليك تفصيل الوظائف الرئيسية للروبوت. يُفضل إذا كان لديك بعض المعرفة والمهارات المتعلقة بالشفرة بحيث يمكنك إنشاء روبوت باستخدام مجموعة الميزات التي تحتاجها. ومع ذلك ، يوفر موقع Medium رمزًا بسيطًا لروبوت Discord. وبالتالي ، إذا لم تكن معتادًا على JavaScript ، يمكنك استخدام الكود التالي لإنشاء روبوت بمجموعة بسيطة من الميزات.

var Discord = يتطلب ('discord.io') ؛ var logger = يتطلب ('winston') ؛ var auth = يتطلب ('./ auth.json') ؛ // تكوين إعدادات المسجل logger.remove (logger.transports.Console) ؛ logger.add (logger.transports.Console، (colorize: true)) ؛ logger.level = 'تصحيح' ؛ // تهيئة Discord Bot var bot = new Discord.Client ((الرمز المميز: auth.token، autorun: true)) ؛ bot.on ('جاهز' ، الوظيفة (evt) (logger.info ('متصل') ؛ logger.info ('مسجل الدخول كـ:') ؛ logger.info (bot.username + '- (' + bot.id + ')') ؛)) ؛ bot.on ('message'، function (user، userID، channelID، message، evt) (// يحتاج الروبوت الخاص بنا إلى معرفة ما إذا كان سينفذ أمرًا // سيستمع إلى الرسائل التي ستبدأ بـ "!" إذا ( message.substring (0، 1) == '!') (var args = message.substring (1) .split ('')؛ var cmd = args ؛

args = args.splice (1) ؛ switch (cmd) (//! ping case 'ping': bot.sendMessage ((to: channelID، message: 'Pong!'))؛ break؛ // فقط أضف أي أوامر حالة إذا أردت ..))) ) ؛

أخيرًا ، يمكنك تشغيل هذا الكود عن طريق فتح JavaScript (أو أي برنامج ترميز آخر من اختيارك) وكتابة "npm install discord.io winston --save" - ​​والذي سيقوم بتثبيت جميع البرامج التي تحتاجها لتشغيل الروبوت. ثم اكتب "node bot.js" في كل مرة تريد فيها تشغيل الروبوت.

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



جار التحميل...
قمة