Artificial Intelligence - هوش مصنوعی

Artificial Intelligence - هوش مصنوعی (http://artificial.ir/intelligence/)
-   پروژه های هوش مصنوعی در ایران (http://artificial.ir/intelligence/forum42.html)
-   -   سایفر روبات (Cypher Robot) (http://artificial.ir/intelligence/thread2.html)

Siavash ۰۷-۱۹-۱۳۸۷ ۰۷:۰۴ بعد از ظهر

راه درست كردن اين كار استفاده از <like> هست. من توي ورژن بعدي اين قابليت رو اضافه مي كنم. چون اگر بخوايم در Request "يا" رو اضافه كنيم Query ها بسيار سنگين ميشن چون نياز به استفاده از Wildcard ها هست.
تگ <like> به اين صورت خواهد بود كه مثلاً شما hi رو با جوابش تعيين مي كنيد. بعد ركورد ديگه اي به نام hello كه تعريف مي كنيد Response اون رو به جاي اينكه دوباره با جواب پر كنيد داخل اون مي نويسيد <like>hi</like>.
در اين صورت اگر جواب hi رو تغيير بديد جواب hello هم تغيير مي كنه.
خوبي ديگرش اين هست كه مي تونيد دو يا چند تا <like> به همراه يك متن اضافه داشته باشيد. مثلا:
كد:

Bah bah, <like>hi</like>. <like>khoobi</like>
اين كد به ابتداي جواب Bah bah, اضافه مي كنه بعد جواب hi رو اضافه مي كنه و بعد . و سپس جواب خوبي رو اضافه مي كنه. هر كدوم از جواب هاي hi و khoobi عوض بشن بعداً اينجا هم بروز مي شن.

فكر مي كنم اين كار بهتر از اضافه كردن or در بخش Request باشه. براي قوي تر شدن Request يك مدل جديد بعداً ارائه مي كنم كه خيلي انتخاب جواب توسط بات رو هوشمندانه تر خواهد كرد.

r-co ۰۷-۱۹-۱۳۸۷ ۰۷:۴۴ بعد از ظهر

????!؟؟؟؟
 
1) می خواستم بدونم که یه Table تو دیتابیس ایجاد کرد مثلا Message2 که اینجا 3 پاسخ باشه و به هنگام در خواست از روبات هر سه رو همزمان بفرسته یعنی سه Response باشه Res..1 Res..2 Res..3
حالا این سه جوابو کنار هم در یک پیغام جا بده و رنگ هاشو خودش اوتوماتیک بزاره یعنی نیاز نباشه ما تک تک برای جوابا رنگ تعیین کنیم .
----------------------------------------------------------------------------------------------------
2) چطوری باید یه دستور نوشت که بجای / مثلا از \ استفاده کرد و اگه بعد از \ هر چیزی بنویسیم بیاد از تو دیتابیس کلمه ای که بعد از \ باشه از تو Table مثلا از تو Message3 بگرده و جوابشو بفرسته؟ یعنی همون کاری که وقتی ما به روبات PM میدیم میاد از تو Message میاد جوابو میفرسته تو اینجا بیاد کلمه ی بعد از \ رو بگیره و جوابشو پیدا کمه؟
نمی خوام \ قبل از Request باشه؟

soroosh-ab ۰۷-۱۹-۱۳۸۷ ۰۸:۲۲ بعد از ظهر

نقل قول:

نوشته اصلي بوسيله Siavash (پست 426)
راه درست كردن اين كار استفاده از <like> هست. من توي ورژن بعدي اين قابليت رو اضافه مي كنم. چون اگر بخوايم در Request "يا" رو اضافه كنيم Query ها بسيار سنگين ميشن چون نياز به استفاده از Wildcard ها هست.
تگ <like> به اين صورت خواهد بود كه مثلاً شما hi رو با جوابش تعيين مي كنيد. بعد ركورد ديگه اي به نام hello كه تعريف مي كنيد Response اون رو به جاي اينكه دوباره با جواب پر كنيد داخل اون مي نويسيد <like>hi</like>.
در اين صورت اگر جواب hi رو تغيير بديد جواب hello هم تغيير مي كنه.
خوبي ديگرش اين هست كه مي تونيد دو يا چند تا <like> به همراه يك متن اضافه داشته باشيد. مثلا:
كد:

Bah bah, <like>hi</like>. <like>khoobi</like>
اين كد به ابتداي جواب Bah bah, اضافه مي كنه بعد جواب hi رو اضافه مي كنه و بعد . و سپس جواب خوبي رو اضافه مي كنه. هر كدوم از جواب هاي hi و khoobi عوض بشن بعداً اينجا هم بروز مي شن.

فكر مي كنم اين كار بهتر از اضافه كردن or در بخش Request باشه. براي قوي تر شدن Request يك مدل جديد بعداً ارائه مي كنم كه خيلي انتخاب جواب توسط بات رو هوشمندانه تر خواهد كرد.


فکر جالبیه ولی به نظر خیلی سنگین میکنه برنامه رو . اگه هر کلمه رو تشخیص بده و جوابش رو از دیتابیس بگیره و همراه با یه کلمه ی اضافه مثل "و" بچسبونه به هم جالب تر باید باشه .

نقل قول:

نوشته اصلي بوسيله r-co (پست 427)
) می خواستم بدونم که یه Table تو دیتابیس ایجاد کرد مثلا Message2 که اینجا 3 پاسخ باشه و به هنگام در خواست از روبات هر سه رو همزمان بفرسته یعنی سه Response باشه Res..1 Res..2 Res..3
حالا این سه جوابو کنار هم در یک پیغام جا بده و رنگ هاشو خودش اوتوماتیک بزاره یعنی نیاز نباشه ما تک تک برای جوابا رنگ تعیین کنیم .
----------------------------------------------------------------------------------------------------
2) چطوری باید یه دستور نوشت که بجای / مثلا از \ استفاده کرد و اگه بعد از \ هر چیزی بنویسیم بیاد از تو دیتابیس کلمه ای که بعد از \ باشه از تو Table مثلا از تو Message3 بگرده و جوابشو بفرسته؟ یعنی همون کاری که وقتی ما به روبات PM میدیم میاد از تو Message میاد جوابو میفرسته تو اینجا بیاد کلمه ی بعد از \ رو بگیره و جوابشو پیدا کمه؟
نمی خوام \ قبل از Request باشه؟

1 رو نمیتونم درست توضیح بدم ولی با این کدهایی که توی سورس هست میشه دقیقآ اینکار رو کرد .

برای 2 باید توی ماژول modFunctions یه Function مثل getResponse ایجاد کنی بعد توی frmMain یه کدی شبیه این بذاری :

نقل قول:

If Left(Message, 5) = "/XXXX" Then
Response = shabihe-get-response("<XXXX>", PersonId)
End If

که به جای shabihe-get-response باید اون Function که ساختی رو بذاری ! و بعد اگه توی Table مورد نظر <XXXX> باشه جوابشو برمیداره و پی ام میکنه !

Ashkan_yazdgroup ۰۷-۲۰-۱۳۸۷ ۰۳:۲۵ قبل از ظهر

ّبا سلام فایل ارور می دهد
 
با سلام خدمت سیاوش عزیز خوشحالم که این برنامه رو آماده کردین اما من بعد از دانلود و اجرای فایل prjYahoo با ارور زیر مواجه شدم :

Compent "msadodc.ocx" or one of its dependensiec not currectly registered : a file is missing or invalid
چجوری این مشکل رو حل کنم با تشکر
نقل قول:

نوشته اصلي بوسيله Siavash (پست 416)
اين هم ورژن 1.2.4 بات ياهو! مسنجر با امكانات جديد زير:
  • امكان ارسال پيام هاي فارسي
  • اضافه شدن ليستي با عنوان IgnoreList در بانك اطلاعاتي، جهت افزودن افراد به اين ليست مي توانيد از تابع addToIgnoreList استفاده كنيد. بات به كاربراني كه در اين ليست قرار دارند پاسخ نخواهد داد.
  • ذخيره شدن نام كاربري آموزش دهنده ي كلمات توسط سويچ /learn.
  • ذخيره شدن كليه ي پيغام هاي دريافت شده و فرستاده شده توسط بات در بانك اطلاعاتي
  • اضافه شدن امكان Hide كردن برنامه و قرارگيري آن در SysTray (كنار ساعت).
  • اضافه شدن امكان Autologin: با ويرايش نمودن فايل Autologin.sm مي توانيد براي بات تعيين كنيد تا با باز شدن نرم افزار به صورت خودكار با يك Username و Password مشخص لاگين كند.
  • بر طرف شدن باگ سويچ /pm در صورتي كه به عنوان گيرنده آيدي خود بات داده مي شد.
پسورد:
كد:

www.artificial.ir


r-co ۰۷-۲۰-۱۳۸۷ ۱۲:۳۹ بعد از ظهر

Manzoramo Nageferti Soroosh-ab
 
سوروش جان منظور من این نبود که تو گفتی اگه یه بار دیگه بری پست قبلی با دقت بخونی می فهمی
------------------------------------- منظور تو این بود خودم بلد بودم (;
اینو تو modFunctions کپی می کنیم
Function gettell(Request As String, PersonId As String) As String
Set Recordset = Connection.Execute("SELECT Request, Response, Response1, Response2 FROM tell WHERE Request = '" & Request & "'", adCmdText)
gettell = getRandom(Recordset!Response)

gettell = getRandom(Recordset!Response1)
gettell = getRandom(Recordset!Response2)

' Replace custom variables
gettell = Replace(gettell, "<$user>", PersonId)
gettell = Replace(gettell, "<$lastuser>", lastUser)
End Function
اینو هم تو Frm کپی می کنیم

If Left(Message, 2) = "ok" Then
Response = gettell(ok, PersonId)


End If
--------------------------------------------------------------------------------
منظور من اینا نبود.... حالا یه بار دیگه برو بخونش

r-co ۰۷-۲۰-۱۳۸۷ ۰۱:۱۷ بعد از ظهر

ocx For Ashkan
 
اینم ocx هایی که ایراد می گیره اشکان
Download

soroosh-ab ۰۷-۲۰-۱۳۸۷ ۱۰:۲۲ بعد از ظهر

سیاوش جان ممکنه یه اسکریپت برای تشخیص invisible بذاری که من بتونم واسه روبات استفاده کنم ؟ :(

BeHNaM ۰۷-۲۱-۱۳۸۷ ۰۱:۴۸ بعد از ظهر

status
 
سلام سیاوش جان خسته نباشی
میخاستم چند تا نکته رو بگم شاید به بهبودی بات کمک کنه:
من واسه اینکه status بات رو یاهو بلوک نکنه مجبور شدم Private Sub tmrStatus_Timer رو از توی سورس بردارم
واسه اینکه اگه چند نفر همزمان به بات سلام میکردن بات مجبور بود پشت سر هم status عوض کنه و این باعث میشد یاهو متوجه بشه و status رو واسه آیدی بات قفل کنه. اگه واسه بات تعریف بشه که با فاصله زمانی معین ( حداقل 30 ثانیه ) status رو عوض کنه تو این حالت یاهو بلوک نمیکنه.

دوم این که اگه کانکشن اینترنت دیسکانکت شه و دوباره کانکت شه بات واسش تعریف نشده خودشو auto login کنه

BeHNaM ۰۷-۲۱-۱۳۸۷ ۰۲:۱۳ بعد از ظهر

دوستان اینم دو تا سورس
شاید برای تکمیل و بهبودی روبات به کارتون بیاد

البته تحت Visual Basic.NET 2005 هست ولی میشه از بعضی جاهاش استفاده کرد مخصوصا از اولی

1-
YCC Trainer

- 2
Yahoo Login Socket

Siavash ۰۷-۲۱-۱۳۸۷ ۱۰:۰۴ بعد از ظهر

نقل قول:

نوشته اصلي بوسيله r-co (پست 427)
1) می خواستم بدونم که یه Table تو دیتابیس ایجاد کرد مثلا Message2 که اینجا 3 پاسخ باشه و به هنگام در خواست از روبات هر سه رو همزمان بفرسته یعنی سه Response باشه Res..1 Res..2 Res..3
حالا این سه جوابو کنار هم در یک پیغام جا بده و رنگ هاشو خودش اوتوماتیک بزاره یعنی نیاز نباشه ما تک تک برای جوابا رنگ تعیین کنیم .
----------------------------------------------------------------------------------------------------
2) چطوری باید یه دستور نوشت که بجای / مثلا از \ استفاده کرد و اگه بعد از \ هر چیزی بنویسیم بیاد از تو دیتابیس کلمه ای که بعد از \ باشه از تو Table مثلا از تو Message3 بگرده و جوابشو بفرسته؟ یعنی همون کاری که وقتی ما به روبات PM میدیم میاد از تو Message میاد جوابو میفرسته تو اینجا بیاد کلمه ی بعد از \ رو بگیره و جوابشو پیدا کمه؟
نمی خوام \ قبل از Request باشه؟

من سوالتون رو درست متوجه نشدم، مي تونيد با مثال بگيد؟
مثلاً بگيد كاربر چه پيغامي بفرسته و بات چه عملي رو انجام بده يا چه اطلاعاتي رو ذخيره كنه.

نقل قول:

نوشته اصلي بوسيله BeHNaM (پست 436)
سلام سیاوش جان خسته نباشی
میخاستم چند تا نکته رو بگم شاید به بهبودی بات کمک کنه:
من واسه اینکه status بات رو یاهو بلوک نکنه مجبور شدم Private Sub tmrStatus_Timer رو از توی سورس بردارم
واسه اینکه اگه چند نفر همزمان به بات سلام میکردن بات مجبور بود پشت سر هم status عوض کنه و این باعث میشد یاهو متوجه بشه و status رو واسه آیدی بات قفل کنه. اگه واسه بات تعریف بشه که با فاصله زمانی معین ( حداقل 30 ثانیه ) status رو عوض کنه تو این حالت یاهو بلوک نمیکنه.

دوم این که اگه کانکشن اینترنت دیسکانکت شه و دوباره کانکت شه بات واسش تعریف نشده خودشو auto login کنه

من فكر مي كنم در ورژن جديد بات اين مشكلات حل شده. نسخه ي 1.2.4 رو بگيريد...
بابت سورس كد ها هم ممنون براي دوستاني كه مي خواهند با Visual Basic .Net در ياهو! لاگين كنند بيس خوبيه. اما متأسفانه هيچ كدام از پكت ها بجز پكت هاي مرتبط به لاگين رو نداره اما مثال خوبي هست.

BeHNaM ۰۷-۲۲-۱۳۸۷ ۱۲:۵۹ قبل از ظهر

سیاوش جان من از نسخه 1.2.4 استفاده کردم
من از کانکشن برای وصل شدن استفاده میکنم ولی شما احتمالا با کارت شبکه یا مودم adsl ppoe به اینترنت وصل هستید.

اینم تصویر بات هنگام دیسی شدن کانکشن

http://chatiha.persiangig.ir/Ax/ax.JPG

من مجدد کانکت کردم ولی بات تو همین حالت مونده .

r-co ۰۷-۲۲-۱۳۸۷ ۰۱:۱۴ بعد از ظهر

Example For Old Post
 
سیاوش جان منظورم از اولی این بود که:
من یه پیغامی به بات می فرستم حالا بات بجای اینکه جوابو از قسمتMessage از تو دیتا بیس بیاره بره از قسمت دیگری مانند Message2 بیاره حالا بجای اینکه فقط یه جواب از Message2 به user ارسال بشه 3 جواب از تو Message2 بفرسته که Message2 سه پاسخ داره تو دیتابیس
حالا واسه اینکه پیام ارسالی ما به بات با پیام های معمولی مجزا شن بیایم یه / یا \ بهش تعریف کنیم که هر حرفی بعد از /یا\ بیاد بره جوابو از تو Message2 به ما بفرسته؟
نمی خوام مثلا تو Message2 تو قسمت Request /یا\ وجود داشته باشه!؟
---------------------------------------------------------------------------------------------
اگه بازم متوجه نشدی یا نامفهومه بگو یه مثال با Databasi که منظرمو بفهمونه بزارم
---------------------------------------------------------------------------------------------
مثال: من به بات میگم salam\ حالا بات بگه Salam Doste Man که کلمات Salam درResponse1 و Doste در Response2و Man در Response3 در دیتا بیس تو قسمت Message2 باشن.!؟ که بات هر سه رو یکجا یا مجزا بفرسته!!!

Farzadice ۰۷-۲۳-۱۳۸۷ ۱۱:۵۴ قبل از ظهر

سلام سیاوش جان خسته نباشی...
واسه منم آنلاین نمیشه...همچین اروری میده!
http://i34.tinypic.com/309nhqt.jpg

Servers.Manager ۰۷-۲۳-۱۳۸۷ ۱۲:۵۶ بعد از ظهر

ولی برای من بدون مشکل کار میکنه اینم آیدی : shahrobot

فقط یه سوال فکر کنم یاهو دیگه از <br> برای سطر کردن استفاده نمیکنه چون هرکاری کرم جمله ها پایین همدیگه قرار نگرفتن

میتونین بگین از چه کدی استفاده میکنه

soroosh-ab ۰۷-۲۳-۱۳۸۷ ۰۱:۰۳ بعد از ظهر

نقل قول:

نوشته اصلي بوسيله Servers.Manager (پست 444)
ولی برای من بدون مشکل کار میکنه اینم آیدی : shahrobot

فقط یه سوال فکر کنم یاهو دیگه از <br> برای سطر کردن استفاده نمیکنه چون هرکاری کرم جمله ها پایین همدیگه قرار نگرفتن

میتونین بگین از چه کدی استفاده میکنه

vbCrLf

کمک کنید لطفآ برای تشخیص کلمات یه کاری انجام بدیم :(

BeHNaM ۰۷-۲۳-۱۳۸۷ ۰۲:۰۰ بعد از ظهر

نقل قول:

نوشته اصلي بوسيله Servers.Manager (پست 444)
ولی برای من بدون مشکل کار میکنه اینم آیدی : shahrobot

فقط یه سوال فکر کنم یاهو دیگه از <br> برای سطر کردن استفاده نمیکنه چون هرکاری کرم جمله ها پایین همدیگه قرار نگرفتن

میتونین بگین از چه کدی استفاده میکنه

برای این کار باید توی دیتابیس انتهای هر نوشته Ctrl+ Enter رو بزنی احتیاج به هیچ کدی هم نیست

BeHNaM ۰۷-۲۳-۱۳۸۷ ۰۲:۰۷ بعد از ظهر

نقل قول:

نوشته اصلي بوسيله farzadice (پست 443)
سلام سیاوش جان خسته نباشی...
واسه منم آنلاین نمیشه...همچین اروری میده!
http://i34.tinypic.com/309nhqt.jpg

فرزاد جان احتمالا شما قبلا یکی از ورژن های قدیمیتر بات رو استفاده کردی منم همین مشکلو داشتم ورژن قدیمیتر رو که استفاده کرده بودم جدیده کار نمیکرد.
واسه همین فایل کامپایل شده جدید رو تو پوشه فایل قدیمی انتقال دادم و بات آنلاین شد.
اخر سر هم نفهمیدم مشکل از کجاست ولی به هر حال کار کرد.

Servers.Manager ۰۷-۲۳-۱۳۸۷ ۰۳:۴۱ بعد از ظهر

نقل قول:

نوشته اصلي بوسيله BeHNaM (پست 446)
برای این کار باید توی دیتابیس انتهای هر نوشته Ctrl+ Enter رو بزنی احتیاج به هیچ کدی هم نیست

یعنی چه برای اینکار باید ctrl + inter بزنی من کاری با دیتابیس ندارم برای اسکریپت میخوام

سروش جان منظوور شمارو متوجه نشدم


من میخوام کاری کنم که روبات اینطوری pm بده برای منو خودش

/gf
/bf
/pm

که همشون پایین همدیگه مشکل من اینه

BeHNaM ۰۷-۲۳-۱۳۸۷ ۰۶:۵۵ بعد از ظهر

نقل قول:

نوشته اصلي بوسيله Servers.Manager (پست 448)
یعنی چه برای اینکار باید ctrl + inter بزنی من کاری با دیتابیس ندارم برای اسکریپت میخوام

سروش جان منظوور شمارو متوجه نشدم


من میخوام کاری کنم که روبات اینطوری pm بده برای منو خودش

/gf
/bf
/pm

که همشون پایین همدیگه مشکل من اینه

Servers.Manager جان منظور ما رو نفهیدم

Servers.Manager ۰۷-۲۳-۱۳۸۷ ۰۸:۳۲ بعد از ظهر

نقل قول:

نوشته اصلي بوسيله behnam (پست 450)
servers.manager جان منظور ما رو نفهیدم

آقا حالت خوبه ؟


یعنی چه ما ؟ کدوم ما؟

BeHNaM ۰۷-۲۳-۱۳۸۷ ۰۹:۱۰ بعد از ظهر

داداش منظورم شما بود . خواستم کمکی کرده باشم مگه نه اصلا اینجا جای ایراد املایی گرفتن نیست

Servers.Manager ۰۷-۲۳-۱۳۸۷ ۱۱:۴۸ بعد از ظهر

خیلی ممنون که میخوایین کمک کنید ولی آخه من آخرش نفهمیدم شما چی میگین

soroosh-ab ۰۷-۲۴-۱۳۸۷ ۰۵:۵۸ قبل از ظهر

مگه نگفتم از vbCrLf استفاده کن ؟!

Servers.Manager ۰۷-۲۴-۱۳۸۷ ۰۹:۴۰ قبل از ظهر

سروش جان منظورت از vbCrLf استفاده کن چیه ، میشه یکم بیشتر توضیح بدی ممنون

Farzadice ۰۷-۲۴-۱۳۸۷ ۱۱:۳۷ قبل از ظهر

مرســـی بهنام جان که جوابه سوالمو دادی...
اما مشکل دیگه اینه که اینو تو ویندوز اکس پی هم اجرا می کنم.همچین اروری میده.
http://i35.tinypic.com/a0f3hy.jpg

mehdi096 ۰۷-۲۶-۱۳۸۷ ۱۲:۳۲ قبل از ظهر

مشکل
 
سلام آقا یکی بمن بگه تصویر زیر چه پیغامی می ده باید چکارش کنم ممنون
متن پیغام اینه:

componet `comctl32.ocx` or one of its dependencies not correctly registered: a file is missing or invalid

این توری من فهمیدم یک فایل خرابه فایل را بزارین ممنون می شم
http://boxstr.com/files/3870676_j3pmx/dfdf.bmp

r-co ۰۷-۲۶-۱۳۸۷ ۰۲:۳۸ بعد از ظهر

OCX File
 
دوست عزیز اینم ocx هایی که ایراد می گیره
Download

Servers.Manager ۰۷-۲۶-۱۳۸۷ ۰۴:۲۶ بعد از ظهر

من چندتا پیشنهاد همچنین مشکل دارم:

اول پیشنهادها:
1. اضافه کردن /date برای نمایش تاریخ شمسی یا میلادی
2. اضافه کردن /time برای نمایش ساعت ایران
3.اضافه کردن /status با زدن این کامند توسط کاربر آیدی طرف توی استاتوس بار روبات قرار بگیره :d

مشکلات:

1. چطوری میشه سطرها رو پایین همدیگه چید: <br> جواب نداد
2. چطوری میشه کاری کرد که روبات به کامندهایی که بهش تعریف کردیم گیر نده و نگه دیگه تکرار نکن مثلا برای /jock که کاربر میخواد به چندتا جوک نگا کنه ولی روبات نمیزاره

با تشکر :rolleyes:

mjanbazi ۰۷-۲۶-۱۳۸۷ ۰۶:۰۷ بعد از ظهر

نقل قول:

نوشته اصلي بوسيله Servers.Manager (پست 471)
من چندتا پیشنهاد همچنین مشکل دارم:

اول پیشنهادها:
1. اضافه کردن /date برای نمایش تاریخ شمسی یا میلادی
2. اضافه کردن /time برای نمایش ساعت ایران
3.اضافه کردن /status با زدن این کامند توسط کاربر آیدی طرف توی استاتوس بار روبات قرار بگیره :d

مشکلات:

1. چطوری میشه سطرها رو پایین همدیگه چید: <br> جواب نداد
2. چطوری میشه کاری کرد که روبات به کامندهایی که بهش تعریف کردیم گیر نده و نگه دیگه تکرار نکن مثلا برای /jock که کاربر میخواد به چندتا جوک نگا کنه ولی روبات نمیزاره

با تشکر :rolleyes:

سلام سیاوش جان
منم با نظرش موافقم
شما این قابلیت ها رو اضافه کن
کاری کن با زدن / مختلف به جدول های مختلف دسترسی پیدا کنیم مثلا با زدن jok/ به جدول جوک بره تو دیتابیس بره
فکر کنم با یک select ساده بتونیم این کارو کنیم
من هم روش کار می کنم امیدوارم بتونم زودتر از تو این سرویسو بزارم (البته با اجازه)

مرسی
برو بچ نظر بدین تا بات بهتر و کامل تر شه با نظر هم می تونیم خیلی باحالش کنیم
ممنون از همه ی شما

Siavash ۰۷-۲۶-۱۳۸۷ ۰۶:۰۷ بعد از ظهر

نسخه 1.3.1 روبات ياهو مسنجر!
 
1(ها)ضميمه
خوب! من يه چند وقتي به خاطر يك كنفرانس اينجا نبودم و همين امروز صبح رسيدم.
پست هاي دوستان رو خوندم، خيلي هاشون جالب و مفيد بودن و سعي كردم در نسخه ي جديد اونايي رو كه پيچيده نيستند اضافه كنم.
توي اين نسخه يك تغيير خيلي خيلي اساسي داريم و اون هم الگوپذيري هست كه بايد يك آموزش دربارش بخونيد. البته سيستم قبلي همچنان سر جاش باقي هست. اول ليست امكانات جديد رو مي گم و بعد هم يك آموزش كوتاه درباره ي الگوها.
امكانات جديدي كه در حال حاضر يادم مياد:
  • افزودن بخشي به نام 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 در بياد. اگر دوستان تمايل به كمك كردن در اين بخش رو دارن خوشحال مي شم اعلام كنند.

پسورد:
كد:

www.artificial.ir

r-co ۰۷-۲۶-۱۳۸۷ ۰۶:۳۰ بعد از ظهر

آمادگی جهت همکاری
 
همانطور که می دونی سیاوش جان من از اولین کسانی بودم که فعالیتم رو تو این سایت آغاز کردم و قبل از اون هم با هم در ارتباط بودیم اگه یادتون باشه.
من در زمینه Help بات آماده ام

r-co ۰۷-۲۶-۱۳۸۷ ۰۷:۱۲ بعد از ظهر

Message Example
 
اینم یه مثال واسه آقا سیاوش درباره پست های قبلی
که سوالو بصورت عکس و دیتابیس گفتم البته همون سوال پست قبلیام بود
Download For Mr Siavash

r-co ۰۷-۲۶-۱۳۸۷ ۰۷:۳۳ بعد از ظهر

SMClient v1.3.2
 
SMClient v1.3.2 تنها چیزی که بهش اضافه شده status/ هست کا بازدن status/ آیدی پی ام دهنده تو استاتوس نشون می ده
status/

Download SMClient v1.3.2

r-co ۰۷-۲۶-۱۳۸۷ ۱۰:۵۹ بعد از ظهر

Ye Moshkel Asasi
 
سیاوش تو این نسخه جدید مشکلی وجود داره که اگه برطرف کنی عالی میشه
تو نسخه های قبلی با نوشتن کد پایین بات جواب می داد ولی الان جواب نمی ده
---------------------------------------------------------------------------------
If Left(Message, 6) = "testpm" Then
"Response = "Test Pm Ok
End If
---------------------------------------------------------------------------------

mjanbazi ۰۷-۲۶-۱۳۸۷ ۱۱:۱۵ بعد از ظهر

نقل قول:

نوشته اصلي بوسيله r-co (پست 478)
سیاوش تو این نسخه جدید مشکلی وجود داره که اگه برطرف کنی عالی میشه
تو نسخه های قبلی با نوشتن کد پایین بات جواب می داد ولی الان جواب نمی ده
---------------------------------------------------------------------------------
If Left(Message, 6) = "testpm" Then
"Response = "Test Pm Ok
End If
---------------------------------------------------------------------------------

rco جان به اینصورت این کارو انجام بده شما sckyahoo.senddata رو نمی زنی معلومه جواب نمی ده باید جوابو براش ارسال کنی این خطو اضافه کن جواب می ده
If Left(Message, 5) = "/
time" Then((Response = "Now Time IS:" & str(Time
( sckYahoo.SendData sendPM(tUser.Text, PersonId, Response)
End If

Siavash ۰۷-۲۷-۱۳۸۷ ۱۲:۰۴ قبل از ظهر

نقل قول:

نوشته اصلي بوسيله r-co (پست 476)
اینم یه مثال واسه آقا سیاوش درباره پست های قبلی
که سوالو بصورت عکس و دیتابیس گفتم البته همون سوال پست قبلیام بود
Download For Mr Siavash

مشكلتون رو متوجه شدم... در اولين فرصت يك نمونه براتون قرار ميدم...

نقل قول:

نوشته اصلي بوسيله r-co (پست 477)
SMClient v1.3.2 تنها چیزی که بهش اضافه شده status/ هست کا بازدن status/ آیدی پی ام دهنده تو استاتوس نشون می ده
status/

Download SMClient v1.3.2

بابت اضافه كردن اين قابليت ممنون!

نقل قول:

نوشته اصلي بوسيله r-co (پست 478)
سیاوش تو این نسخه جدید مشکلی وجود داره که اگه برطرف کنی عالی میشه
تو نسخه های قبلی با نوشتن کد پایین بات جواب می داد ولی الان جواب نمی ده
---------------------------------------------------------------------------------
If Left(Message, 6) = "testpm" Then
"Response = "Test Pm Ok
End If
---------------------------------------------------------------------------------

دليل اين مشكلتون اين هست كه در بخش سويچ ها قرار داديد اين شرط رو. شرط اول براي سويچ ها اين هست كه اولين كاراكتر اون / باشه اما testpm با / شروع نميشه!
پس يا بايد شرط رو خارج از اون شرط قرار بديد يا بايد با / شروع كنيد نام سويچ رو، مثلاً /testpm

r-co ۰۷-۲۷-۱۳۸۷ ۱۰:۴۰ قبل از ظهر

مثال برای Sendpm
 
سیاوش من همین کدsendpm رو تونسخه های قبلی قرار می دادم به راحتی جواب می داد ولی تو این نسخه اینطوری نیست. من یه نمونه از هر دو رو واسه دانلود گذاشتم(هم نسخه قدیم هم جدید) ببینیش حتما مشکل رو می فهمی....؟
در SMClient v1.2.4 کار می کنه ولی در SMClient 1.3.2 کار نمی کنه ؟؟؟؟؟؟؟
Download For Siavash

Siavash ۰۷-۲۷-۱۳۸۷ ۰۶:۵۷ بعد از ظهر

اتفاقاً اين به خاطر باگي بود كه در نسخه ي قبل وجود داشت! يعني كار درست در نسخه ي جديد داره انجام ميشه. دليلش هم اين هست كه جواب شما با جواب تهي جايگزين ميشه. براي برطرف كردن اين مشكل از Else بايد استفاده كنيد. يا اينكه اون بخش رو با اين كد تعويض كنيد:
كد:

If Left(Message, 6) = "sendpm" Then
    Response = "Test Send Pm OK"
    sckYahoo.SendData sendPM(tUser.Text, PersonId, Response)
    Exit Sub
End If

دليل اينكه اين اتفاق مي افته اين هست كه ابتدا شما مقدار Response رو تغيير ميديد و بعد در خط هاي بعد مقدار Response رو با استفاده از getResponse ميخواد بدست بياره كه به خاطر پيدا نشدن جواب و تهي بودن اون مقدار "" داخل Response ريخته مي شه و در نتيجه بات فكر مي كنه كه جوابي موجود نبوده.
در ورژن قبلي وقتي جوابي پيدا نميشد تابع getResponse با ارور از تابع خارج مي شد (كه به خاطر استفاده از On error به تا انتهاي تابع getResponse نمي رفت و مقدار تهي جايگزين جواب نميشد) و در 1.3.1 اين مشكل حل شده.
انشاالله در نسخه ي بعدي ساختار بخش GetPM رو كمي تغيير ميدم تا ساده تر بشه به اون امكانات جديد اضافه كرد.

r-co ۰۷-۲۷-۱۳۸۷ ۰۸:۵۴ بعد از ظهر

Ama iN Code Dar Hado Andazeye Gabli Nist
 
به نظر من سیستم قبلی ارسال پی ام مثلاsendpmدر مثال های قبلی خیلی بهتر از این نمونه جدید هست. اگه بشه در نسخه جدید مانند سری قبلی باشه خیلی عالی تره تا اینی که الان هست-- تغییر در این سیستم موجب میشه که ما کلی از کدارو تغییر بدیم--

Siavash ۰۷-۲۷-۱۳۸۷ ۰۹:۱۲ بعد از ظهر

دوست خوب!
در اون حالت در هر بار سوالي كه كاربر مي پرسيد و در بانك اطلاعاتي وجود نداشت يك Error‌داخلي توليد ميشد. اين اصلاً از نظر برنامه نويسي درست نبود. در حال حاضر هم با قرار دادن يك Exit Sub كه در مثال بالا قرار دادم براحتي مي تونيد همين كاري كه مي خواهيد رو انجام بديد. در هر صورت در ورژن بعدي انشاالله يك استاندارد در اين زمينه درست مي كنيم تا دقيقا جاي اضافه كردن كد هاي جانبي مشخص باشه و ديگه تغيير نكنه... در اين ارتباط حق كاملاً با شماست.

يك ايده - لطفاً تمام دوستان بخوانند:
تصميم دارم در نسخه هاي آينده يك قسمت به كد اضافه كنم تا اطلاعات جديدي كه به هر بات اضافه مي شه در يك پايگاه داده ي مركزي ذخيره بشه! مثلاً وقتي من يك الگوي جديد به بات اضافه مي كنم در يك پايگاه مركزي اون الگوي جديد با نام خود من در اونجا ثبت بشه. همينطور براي تمام دوستاني كه از اين بات استفاده مي كنند.
هدف اين هست كه يك بات مركزي با كمك تمام دوستان ساخته بشه كه بتونه به اكثر سوالات جواب بده. اين بانك اطلاعاتي هم در دسترس عموم قرار خواهد گرفت يعني در نهايت به نفع خود دوستان هم خواهد بود.

حالا نظرتون در اين ارتباط چي هست؟ آيا روي نوشتن همچين سيستمي كار كنم يا خير؟


زمان محلي شما با تنظيم GMT +3.5 هم اکنون ۱۰:۲۷ قبل از ظهر ميباشد.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.1.0 ©2007, Crawlability, Inc.