نظرًا لقرار Discord بفرض أوامر الشرطة المائلة على الروبوتات، سأتوقف عن تطوير هذا المشروع. هذا يعني أنني لن أقوم بإصلاح أي مشكلات أو أخطاء أو إضافة ميزات جديدة. سيبقى المشروع على GitHub ولكن سيتم تحقيقه.
السبب الرئيسي الذي دفعني لاتخاذ هذا القرار هو أن تحويل الروبوت لاستخدام أوامر الشرطة المائلة سيتطلب مني إعادة كتابة منطق الأمر بالكامل. ليس لدي الوقت ولا الدافع لإعادة كتابة الأجزاء الرئيسية من قاعدة التعليمات البرمجية. علاوة على ذلك، يعد dynoBot ثقيلًا جدًا في الصيانة، خاصة فيما يتعلق بوحدة بث الموسيقى التي تعتمد على الكثير من حزم npm الأخرى التي تميل إلى التعطل.
ولذلك، سأضع حداً لهذا المشروع للأسف.
dynoBot هو روبوت Discord معياري يستخدم JavaScript واختياريًا أيضًا Python وLua. لقد تم تصميمه بطريقة تمكن من إنشاء وحدات جديدة بسهولة بلغة البرمجة النصية التي تفضلها.
الفكرة وراء الروبوت هي إنشاء الوحدات التي تحتاجها بنفسك بأقل قدر من الجهد. لذلك، يمكن اعتبار dynoBot بمثابة إطار عمل يتعامل مع كل ما يتعلق بواجهة برمجة تطبيقات Discord، حتى تتمكن من البدء فورًا في تطوير الوحدات النمطية الخاصة بك.
ومع ذلك، يمكن استخدام dynoBot دون كتابة سطر واحد من التعليمات البرمجية طالما أن الوحدات المضمنة هي كل ما تحتاجه.
يحتوي الروبوت حاليًا على الوحدات التالية:
يمكنك رؤية جميع الأوامر المتاحة عن طريق كتابة "@BotName help" في دردشة Discord. وبدلاً من ذلك يمكنك إلقاء نظرة على ملف Commands.json.
تحتاج أولاً إلى عقدة Nodejs واختياريًا python3 لوحدات python وLua لوحدات Lua. بعد التثبيت، انسخ هذا المستودع وقم بتشغيل npm install
داخل مجلد dynoBot
. يجب تثبيت جميع التبعيات المطلوبة.
لتشغيل برنامج Discord bot، سيتعين عليك إضافة ملف security.json
داخل الدليل dynoBot/cfg
. يجب أن يبدو مثل هذا:
{
"token" : " your discord bot token "
}
هام: عندما تقوم بتقسيم هذا المشروع، لا تقم بتحميل ملف Security.json إلى مستودعك. سيسمح هذا للآخرين بسرقة رمز الخلاف الخاص بك.
إذا كنت تريد استخدام وحدة Wolfram|Alpha، فستحتاج إلى مفتاح API الخاص بها في ملف security.json
أيضًا. يمكنك طلب مفتاح Wolfram|Alpha API مجانًا هنا.
باستخدام مفتاح API، يجب أن يبدو ملف Security.json الخاص بك كما يلي:
{
"token" : " your discord bot token " ,
"wolframAlphaAPI" : " your api key "
}
كإعداد افتراضي، تتم كتابة كافة السجلات إلى وحدة التحكم. إذا كنت تريد أن تتم كتابة السجلات في ملفات السجل، فيجب عليك تمكين تسجيل الدخول في ملف security.json
كما يلي:
{
"token" : " your discord bot token " ,
"logging" : true
}
يمكنك الآن بدء تشغيل الروبوت باستخدام الأمر node main.js
الموجود داخل الدليل dynoBot
.
يمكنك إنشاء وحدات في JavaScript أو Python أو Lua. هناك نوعان من الوحدات، وحدة الدردشة ووحدة الخطاف. يتم تنفيذ وحدة الدردشة في كل مرة يرسل فيها المستخدم رسالة بالأمر المقابل. يتم تنفيذ الخطاف تلقائيًا في فترة زمنية محددة. سأوضح لك أدناه كيفية إنشائها في JavaScript وPython وLua. وبدلاً من ذلك، يمكنك إلقاء نظرة على نماذج النماذج الخاصة بـ JavaScript وPython وLua المضمنة في المشروع.
تحتاج وحدات JavaScript وPython وLua إلى إدخال في ملف Commands.json يبدو كالتالي:
{
"group" : " command-group-name " ,
"type" : " python " ,
"regex" : " py-example|python example " ,
"help" : " python example " ,
"path" : " src/py-modules/example-python.py " ,
"hidden" : false
}
سيتم استخدام محتوى خاصية المساعدة لقائمة الأوامر. إذا لم تكن موجودة، فسيتم استخدام خاصية regex.
يمكن استخدام خاصية المجموعة للسماح بالتصفية أثناء استخدام أمر المساعدة. على سبيل المثال، هناك مجموعة تسمى "أساسية" تتضمن جميع الأوامر الأساسية المضمنة. إذا كنت تريد رؤية أوامر المجموعة "الأساسية" فقط في قائمة الأوامر، فاستخدم "مساعدة" بدلاً من أمر المساعدة العادي.
سيؤدي تعيين مخفي إلى صحيح إلى استبعاد الأمر من قائمة الأوامر.
تتمتع وحدة JavaScript بإمكانية الوصول المباشر إلى غلاف discord.js. يبدو الهيكل الأساسي للوحدة كما يلي:
module . exports = {
run : function ( msg , client ) {
msg . getTextChannel ( ) . send ( "I received these parameters: " + msg . getContentArray ( ) ) ;
}
} ;
الكود الذي يتم تنفيذه عند استدعاء الوحدة ينتمي إلى وظيفة التشغيل. يتم الحصول على المعلمات msg والعميل بواسطة غلاف chatbot-api. يمكنك العثور على مزيد من المعلومات حول التنفيذ هناك.
لا تتمتع وحدة Python بإمكانية الوصول إلى غلاف discord.js ولكنها تحصل على msg.contentArray
و msg.aRegexGroups
. يبدو الهيكل الأساسي كما يلي:
import sys
msg = sys . argv [ 1 ]. split ( "," ) # Array of input parameters
regexGroups = sys . argv [ 2 ]. split ( "," ) # Array of input regex groups
# insert code to handle the input parameters here
print ( "I received these parameters: " + str ( msg )) # This will be the msg that the bot sends
print ( "These are the regex groups" + str ( regexGroups )) # This is a second message that the bot sends
sys . stdout . flush () # cleanup
كما ترون، الطباعة تجعل الروبوت يرسل رسالة.
لا تتمتع وحدة Lua أيضًا بإمكانية الوصول إلى غلاف discord.js ولكنها تحصل على msg.contentArray
و msg.aRegexGroups
. يبدو الهيكل الأساسي كما يلي:
-- Import lua module helper for splitting strings into arrays
require " src/utils/luaUtils "
local sMessage = arg [ 1 ] -- String of input parameters
local sRegexGroups = arg [ 2 ] -- String of input regex groups
local aMessage = utils . splitString ( sMessage , " , " ) -- Array of input parameters
local aRegexGroups = utils . splitString ( sRegexGroups , " , " ) -- Array of input regex groups
-- Insert code to handle the input parameters here
-- This will be the msg that the bot sends
print ( " I received these parameters: [ " .. tostring ( aMessage [ 1 ]) .. " , " .. tostring ( aMessage [ 2 ]) .. " ] " )
-- This is a second message that the bot sends
print ( " These are the regex groups: [ " .. tostring ( aRegexGroups [ 1 ]) .. " ] " )
كما ترون، الطباعة تجعل الروبوت يرسل رسالة. وحدات Lua الشاملة تشبه إلى حد كبير وحدات Python.
تحتاج كل من وحدتي JavaScript وPython إلى إدخال في ملف Hooks.json يبدو كالتالي:
"technicalHookName" : {
"type" : " js " ,
"name" : " hookName " ,
"path" : " src/js-modules/yourModule.js " ,
"channel" : 0 ,
"interval" : 10000 ,
"running" : false
}
تتمتع وحدة JavaScript بإمكانية الوصول إلى كائن القناة الموجود في غلاف discord.js. الكود الذي يتم تنفيذه عند استدعاء الوحدة ينتمي إلى وظيفة الخطاف.
module . exports = {
hook : function ( channel ) {
channel . send ( "This js message is automatically sent in a specific interval" ) ;
}
} ;
يتم تنفيذ وظيفة الخطاف عندما يكون لدى الملف Hooks.json قناة موجودة ويعمل.
لا تتمتع وحدة Python بإمكانية الوصول إلى كائن القناة، ولا تتلقى أي مدخلات. إنه يقوم فقط بتشغيل البرنامج النصي python وكل مكالمة طباعة تنشئ رسالة روبوت. يجب أن يبدو مثل هذا:
import sys
# insert code to handle the input parameters here
# This will be the msg that the bot sends
print ( "This py message is automatically sent in a specific interval" )
sys . stdout . flush () # cleanup
لا تتمتع وحدة Lua أيضًا بإمكانية الوصول إلى كائن القناة، ولا تتلقى أي مدخلات. إنه يقوم فقط بتشغيل البرنامج النصي lua وكل مكالمة طباعة تنشئ رسالة روبوت. يجب أن يبدو مثل هذا:
-- Insert code here
-- This will be the msg that the bot sends
print ( " This lua message is automatically sent in a specific interval. " )
وهذا مشابه مرة أخرى لوحدات بايثون.
نعم، سأقوم بمراجعة الكود الخاص بك وإذا كان جيدًا، فسوف أقوم بدمجه في البرنامج الرئيسي. يرجى تعديل نمط التعليمات البرمجية الخاص بك فيما يتعلق بالوحدات الموجودة بالفعل.
نعم، هذا جيد أيضًا. ولكن سيكون من الرائع أن يستفيد عدد أكبر من الأشخاص من عملك.