خوب! من يه چند وقتي به خاطر يك كنفرانس اينجا نبودم و همين امروز صبح رسيدم.
پست هاي دوستان رو خوندم، خيلي هاشون جالب و مفيد بودن و سعي كردم در نسخه ي جديد اونايي رو كه پيچيده نيستند اضافه كنم.
توي اين نسخه يك تغيير خيلي خيلي اساسي داريم و اون هم الگوپذيري هست كه بايد يك آموزش دربارش بخونيد. البته سيستم قبلي همچنان سر جاش باقي هست. اول ليست امكانات جديد رو مي گم و بعد هم يك آموزش كوتاه درباره ي الگوها.
امكانات جديدي كه در حال حاضر يادم مياد:
- افزودن بخشي به نام Test bot جهت تست كردن بات بصورت آفلاين
- برطرف كردن نگرفتن پيغام از وب مسنجر.
- اضافه شدن تگي به نام <nl> جهت رفتن به خط بعد (مثال داخل Database موجود هست.)
- اضافه شدن تگي با عنوان <break> جهت شكاندن پاسخ به چند پيغام (مثال در Database موجود است.)
- تغيير ظاهري محيط و تغيير دكمه ها و ... به استايل XP.
- افزودن تگ <like> براي سوال هاي مشابه. (مثلاً Chetori و حالت چطوره، كه كافيه جواب يكي را تعيين كنيد و ديگري را بصورت <like> اضافه كنيد.
- افزودن سويچ هاي /date و /time.
- افزودن لاگين خودكار بات در صورت قطع شدن به اين صورت كه بات هر يك دقيقه چك مي كند كه آيا آفلاين است يا آنلاين و در صورت آفلاين بودن خود را مجدداً لاگين مي كند.
- تغيير آيكان برنامه.
- افزودن Shortcut براي مخفي كردن برنامه (Ctrl+H) و تست بات.
- افزودن تگ هاي <set> و <get> كه در آموزش توضيح داده خواهد شد.
- ايجاد فايل Setup.bat جهت برطرف شدن ايراد هايي كه به خاطر كمبود بعضي فايل ها در سيستم دوستان ايجاد ميشد (مثلا File **** is missing). كافيه اين فايل رو قبل از باز كردن برنامه اجرا كنيد تا فايل هاي مورد نياز رو داخل پوشه هاي مناسب كپي كنه. از دوست خوبمون Servers.Manager بابت درست كردن اين فايل و دوستمون r-co به خاطر پيدا كردن و تهيه ي فايل هاي مورد نياز تشكر مي كنم.
آموزش
و اما
آموزش الگو و نحوه ي استفاده از اون:
منظور از الگو اين هست كه به جاي اينكه فقط براي يك كلمه ي خاص جواب تعيين كنيم براي يك سري مجموعه عبارت جواب تعيين كنيم! با مثال بهتر متوجه خواهيد شد:
داخل بانك اطلاعاتي يك Table هست به نام Patterns كه با Access مي تونيد اطلاعات به اون اضافه كنيد. يك سري الگو بصورت پيشفرض داخل اين Tableقرار داره كه به بررسي اونا مي پردازيم.
اوليش
*chetori* هست! اين به اين مفهوم هست كه در صورتي كه كلمه ي چطوري توي هر عبارتي باشه به اين الگو تعلق مي گيره. مثلاً در صورتي كه كاربري بگه
chetori azizam جواب بات عبارت مقابل اين الگو خواهد بود.
حالا در صورتي كه ستاره ي اول وجود نداشت يعني عباراتي كه با
chetori شروع مي شن به اين الگو تعلق مي گيرن. پس * به مفهوم ادامه دار بودن از اون طرف يا جاي خالي هست.
الگوي بعدي كه بررسي مي خوايم بكنيم اين هست:
esmam * hast
همونطوري كه گفتم * به مفهوم جاي خالي مي تونه باشه. هر عبارتي كه با esmam شروع بشه و با hast تموم بشه توي اين الگو قرار مي گيره. مثلا
esmam siavash hast.
اگر به Response اين الگو دقت كنيد يك تگ جديد خواهيد ديد و بك متغير جديد.
اول به متغير كه
<$star1> هست مي پردازيم. اين مقدار با مقداري كه به جاي ستاره ي اول هست جايگزين مي شه. مثلا در
esmam siavash hast به جاي * كلمه ي siavash قرار گرفته پس
<$star1> مقدارش siavash خواهد شد.
<$star2> مقداري هست كه به جاي ستاره ي دوم قرار مي گيره كه با توجه به اينكه در اين الگو يك ستاره بيشتر نداريم خالي خواهد بود.
مثلاً اگر الگوي
* yani * رو داشته باشيم و كاربر عبارت
cat yani gorbe رو به بات بده
<$star1> كلمه ي cat و
<$star2> كلمه ي gorbe خواهد بود.
خوب حالا بريم سراغ تگ <set>. همونطور كه اينجا مي بينيم در انتهاي response براي esmam * hast عبارت زير رو داريم:
كد:
<set>name<to><$star1></set>
يعني مقدار name براي اين كاربر رو به
<$star1> تغيير بده! با اجراي اين بخش مقدار
<$star1> در بانك اطلاعاتي (SavedData Table) به عنوان مقدار براي name اين كاربر ذخيره ميشه و براي هميشه در حافظه ي بات مي مونه.
پس اگر من با آيدي test به بات بگم
esmam siavash hast براي مقدار name كاربر test مقدار siavash ذخيره خواهد شد.
حالا اگر الگوي بعدي رو ببينيد كه
*esmam chie* هست در Responseش عبارت زير رو داريم:
كد:
Ta jaii ke yadame esmet <get>name<default>Majhool</get>e!
احتمالاً حدث زديد اين عبارت چيكار مي كنه! با استفاده از تگ <get> مقدار name ذخيره شده براي كاربر رو بدست مياريم! مقداري كه جلوي <default> نوشته شده هم مقدار پيشفرض رو تعيين مي كنه! يعني در صورتي كه مقدار name براي اين كاربر ذخيره نشده باشه در اين مثال Majhool به جاش قرار ميده.
پس بگذاريد يك مكالمه ي تست با بات داشته باشيم:
كد:
<bot>: Avval!
Siavash: esmam chie?
<bot>: Ta jaii ke yadame esmet Majhoole!
Siavash: esmam siavash hast
<bot>: siavash jan, esmet yadam mimoone!
Siavash: esmam chie?
<bot>: Ta jaii ke yadame esmet siavashe!
Siavash: esmam ali hast
<bot>: ali jan, esmet yadam mimoone!
Siavash: esmam chie?
<bot>: Ta jaii ke yadame esmet alie!
پس طريقه ي استفاده ي تگ هاي <get> و <set> رو ياد گرفتيم. با استفاده از اين روش مي تونيم هر اطلاعاتي از كاربر بپرسيم و مقدارش رو براي كاربر ذخيره كنيم و بعد ها از اون در جوابمون استفاده كنيم.
نكته ي بعدي در الگو ها ستون Priority هست كه داخلش يك سري عدد قرار گرفته! اين اعداد اولويت الگو ها رو مشخص مي كنند. هر چقدر عدد اولويت بالاتر باشه الگو داراي اولويت بالاتري هست.
براي مثال الگو هاي بعدي رو بررسي مي كنيم.
الگوي
*salam* عبارت هاي خيلي زيادي رو مي پوشونه! يعني هر عبارتي كه داخلش سلام باشه جزو اين الگو قرار مي گيره و بات به كاربر سلام مي كنه. اما فرض كنيم كاربر به بات بگه
salamat bashi azizam. در اين صورت بات بايد جواب ديگري به كاربر بده چون منظور كاربر سلام كردن نبوده. براي اين كار الگوي ديگري تعيين مي كنيم با مقدار
*salamat bashi*. اينجا يك مشكل پيش مياد! هر دو الگو براي عبارت
salamat bashi azizam درست هستند. در اين مواقع بات الگويي كه اولويت بالاتري داررو انتخاب مي كنه! مثلا در اينجا چون
*salamat bashi* اولويت 80 رو داره و
*salam* اولويت 60 براي عبارت
salamat bashi azizam جواب الگوي
*salamat bashi* انتخاب ميشه كه دقيقاً جوابي هست كه انتظارش رو داريم.
نكته ي بعدي اين كه بات هنوز عبارت هاي داخل Message Table رو چك مي كنه و در صورتي كه جواب قطعي در اين Table پيدا نشد به دنبال جواب در بخش Pattern مي گرده! پس در صورتي كه مي خواهيد براي يك عبارت قطعي (بدون *) جوابي تعيين كنيد اين كار رو در Message Table انجام بديد تا سرعت عمليات سريع تر باشه.
بخش الگوها كمي پيچيده تر از بقيه ي بخش ها هست اما خيلي به كارايي بات اضافه مي كنه. هر سوالي در باره ي الگو ها داشتيد همينجا بپرسيد.
در ورژن بعدي قابليت موضوع گيري رو با بات اضافه خواهم كرد. اين كار رو در اين ورژن نكردم چون اون موضوع هم كمي پيچيده هست و يك دفعه درك هر دو موضوع كمي دشوار مي شد.
در حال حاضر يكي از مهمترين كار هايي كه براي اين بات بايد انجام داد ايجاد يك Help كامل جهت استفاده از اين نرم افزار هست. يعني تمام بحث هاي اين تاپيك بصورت يك Help يا Chm File در بياد. اگر دوستان تمايل به كمك كردن در اين بخش رو دارن خوشحال مي شم اعلام كنند.
پسورد: