თუ თქვენ ყოფილხართ ინტერნეტ სარელეო ჩატში (IRC), დიდი ალბათობით თქვენ შეხვდით ბოტს რაღაც მომენტში. ბოტები არის დამოუკიდებელი პროგრამები ან სკრიპტები, რომლებიც დაკავშირებულია ქსელთან ისე, როგორც ამას ადამიანი აკეთებდა. მათი დაპროგრამება შესაძლებელია იმისათვის, რომ უპასუხოს მომხმარებლის ბრძანებებს ან თუნდაც ჩატი. ამ სახელმძღვანელოში შეგიძლიათ იპოვოთ რა არის თქვენი ვარიანტი IRC ბოტის შესაქმნელად, ასევე როგორ ავაშენოთ ის ნულიდან.
ნაბიჯები
მეთოდი 1 დან 2: ვარიანტების შეფასება
ნაბიჯი 1. განვიხილოთ კლიენტის სკრიპტის დაყენება
ზოგჯერ თქვენ უბრალოდ გსურთ მარტივი დავალების შესრულება და არ გინდათ რომ ეს იყოს დამოუკიდებელი პროგრამა. ამ შემთხვევაში, თქვენ შეგიძლიათ მიამაგროთ სკრიპტი IRC კლიენტს. ეს საკმაოდ გავრცელებულია mIRC– სთან, რომელსაც აქვს მძლავრი სკრიპტირების ძრავა და ხელმისაწვდომი სკრიპტების ფართო სპექტრი. ეს არის უმარტივესი ვარიანტი და რეკომენდირებულია, თუ არ გაქვთ პროგრამირების დიდი გამოცდილება. დანარჩენი ამ სახელმძღვანელოსთვის, ინსტრუქციები მოითხოვს კომპიუტერული პროგრამირების გარკვეულ ცოდნას.
ნაბიჯი 2. განვიხილოთ თქვენი ბოტისთვის უკვე არსებული კოდის ბაზა
არსებობს მრავალი ღია წყარო და უფასო პროგრამა, რომელიც დაგეხმარებათ სწრაფად შექმნათ თქვენი პერსონალური ბოტი. ერთი ასეთი მაგალითია Eggdrop, უძველესი IRC ბოტი, რომელიც ჯერ კიდევ შენარჩუნებულია.
ნაბიჯი 3. განვიხილოთ საკუთარი ბოტის დაწერა
მოწინავე IRC მომხმარებლებისთვის და დეველოპერებისთვის, რომლებმაც უკვე იციან თავიანთი გზა პროგრამირების ენაზე, ეს შესანიშნავი ვარიანტია. თქვენ შეგიძლიათ გამოიყენოთ თითქმის ნებისმიერი ენა, რამდენადაც მას აქვს სოკეტის მხარდაჭერა, მაგრამ პოპულარული ენები მოიცავს Python, Lua, PHP, C და Perl. თუ თქვენ არ იცით რომელიმე მათგანი, მაგრამ იცით სხვა ენა, ეს არ არის პრობლემა. თქვენ ჩვეულებრივ შეგიძლიათ იპოვოთ მაგალითები ინტერნეტში თქვენთვის სასურველ ნებისმიერ ენაზე. ამ სტატიისთვის ჩვენ ვაჩვენებთ PHP– ის გამოყენებას. PHP– ის გამოსაყენებლად, თქვენ უნდა გქონდეთ დაინსტალირებული PHP-CLI თქვენს კომპიუტერზე ან სერვერზე.
- PHP შეგიძლიათ ჩამოტვირთოთ php.net– დან
- PHP სკრიპტების შესრულება შესაძლებელია ბრძანების სტრიქონიდან. დამატებითი ინფორმაციისთვის და PHP– ის გამოყენებისათვის იხილეთ ეს PHP სახელმძღვანელო გვერდი.
მეთოდი 2 დან 2: საკუთარი ბოტის განვითარება
ნაბიჯი 1. შეაგროვეთ კავშირის დეტალები
ქსელში წარმატებით დასაკავშირებლად თქვენ უნდა მიიღოთ შემდეგი ინფორმაცია.
-
სერვერი: სერვერის დომენის სახელი, რომელიც გამოიყენება IRC– ს დასაკავშირებლად, მაგ
chat.freenode.net
- პორტი: უმეტეს შემთხვევაში, ეს არის 6667, მაგრამ თუ დარწმუნებული არ ხართ, შეამოწმეთ თქვენი IRC კლიენტი ან ქსელის ვებ გვერდი.
- მეტსახელი: მეტსახელი თქვენ ბოტმა უნდა გამოიყენოს. გაითვალისწინეთ, რომ ზოგიერთი სპეციალური სიმბოლო ჩვეულებრივ დაუშვებელია (@#! ~).
-
იდენტიფიკაცია: იდენტური ველი ჩნდება მეტსახელის შემდეგ, როდესაც ვინმე ასრულებს WHOIS- ს:
მეტსახელი! ident@hostname
- GECOS: ეს ველი, როგორც წესი, შეიცავს მომხმარებლის ნამდვილ სახელს ან ბოტის ზოგად აღწერას, მაგრამ თქვენ შეგიძლიათ განათავსოთ რაც გსურთ იქ.
- არხი: თქვენ ჩვეულებრივ გინდათ რომ თქვენი ბოტი იყოს ერთ ან მეტ არხზე. უმეტეს ქსელში ეს არის##', მაგრამ შეიძლება სხვა რამ იყოს.
ნაბიჯი 2. კონფიგურაციის ინიციალიზაცია თქვენს სკრიპტში
ამის ყველაზე ძირითადი გზა არის რამდენიმე ცვლადის დასახელება ზემოთ კონფიგურაციის სახელების მიხედვით. თქვენ ასევე შეგიძლიათ შეინახოთ ისინი კონფიგურაციის ფაილში და გაანალიზოთ ისინი, მაგრამ ჯერჯერობით ჩვენ უბრალოდ დავრჩებით აბსოლუტურ აუცილებლობაზე.
ნაბიჯი 3. დაკავშირება ქსელში
ამისათვის თქვენ უნდა გახსნათ სოკეტი სერვერზე მითითებულ პორტში. თქვენ ასევე უნდა დაამატოთ შეცდომების დამუშავების კოდი ამ ნაწილში იმ შემთხვევაში, თუ კავშირი რაიმე მიზეზით ვერ ხერხდება. ამ შემთხვევაში, PHP გვთავაზობს გარკვეულ ფუნქციებს შეცდომების ეფექტურად გადასაჭრელად.
ნაბიჯი 4. დაარეგისტრირეთ თქვენი ბოტი
ეს ნიშნავს სერვერზე თქვენი მეტსახელის, იდენტობის და GECOS- ის მიწოდებას და არა NickServ– ით დარეგისტრირებას. ამისათვის უბრალოდ ჩაწერეთ NICK და USER ბრძანებები სერვერზე, რასაც მოჰყვება ვაგონის დაბრუნება და ახალი ხაზი. აუცილებელია ამის გაკეთება ზუსტად ისე, როგორც ნაჩვენებია, რადგან ასე არის მითითებული RFC1459- ში, IRC პროტოკოლის სპეციფიკაციაში.
გაითვალისწინეთ, რომ შუა ორი პარამეტრი (ამ შემთხვევაში * და 8) უნდა იყოს მითითებული, მაგრამ ისინი იგნორირებულია სერვერის მიერ. ეს ორი გამოიყენება მხოლოდ დაკავშირებულ სერვერებს შორის და არა უშუალოდ კლიენტის მიერ
ნაბიჯი 5. განაგრძეთ მონაცემების ამოღება სოკეტიდან მარყუჟის გამოყენებით
თუ თქვენ არ იყენებთ მარყუჟს, თქვენი სკრიპტი დაუყოვნებლივ დასრულდება და ბოტი ძირითადად უსარგებლო იქნება. იმისათვის, რომ დარჩეთ დაკავშირებული, თქვენ უნდა მოიტანოთ მონაცემები სერვერიდან, შეამოწმოთ თქვენთვის სასურველი ნაკადის ნებისმიერი შეყვანა და თუ ასეა, უპასუხეთ მას. აქ, ჩვენ ვიღებთ მონაცემებს socket_read () - ისთვის, რომ ავიღოთ ჩვენთვის ხელმისაწვდომი ნებისმიერი მონაცემი. თუ არსებობს, ჩვენ ვაგრძელებთ იმას, რაც მარყუჟშია. ასევე შეიძლება სასარგებლო იყოს ნედლეული მონაცემების კონსოლზე გამოტანა, ასე რომ თქვენ ხედავთ რა ხდება ბოტის პერსპექტივიდან.
ნაბიჯი 6. დაწერეთ პინგ დამმუშავებელი
Ეს მნიშვნელოვანია. თუ დროულად არ უპასუხებთ პინგებს, სერვერი გათიშავს თქვენ. მოდით ვიზრუნოთ ამაზე პირველ რიგში. პინგები ასე გამოიყურება სერვერიდან გაგზავნისას:
PING: rajaniemi.freenode.net
რა სერვერს არ აქვს აუცილებელი სახელი დაასახელოს ':' - ის შემდეგ, მას შეუძლია მიაწოდოს რაც უნდა. თქვენ * უნდა * გაიმეოროთ ზუსტად ის, რაც თქვა სერვერმა, გარდა PONG– ის გამოყენების.
ნაბიჯი 7. შეუერთდით თქვენს არხებს
კარგი, ჩვენ გვაქვს ბოტი, რომელიც აკავშირებს ქსელს და პასუხობს პინგებს, მაგრამ სხვაგვარად არაფერს აკეთებს. იმისათვის, რომ ადამიანებმა ნახონ და გამოიყენონ თქვენი ბოტი, ის უნდა იყოს არხზე (წინააღმდეგ შემთხვევაში თქვენ უნდა უთხრათ მას, რომ უპასუხოს პირად შეტყობინებებს).
- ამისათვის ჩვენ შევამოწმებთ სერვერის სტატუსის კოდებს 376 ან 422. 376 ნიშნავს MOTD (დღის შეტყობინება) დასრულებულს. 422 ნიშნავს, რომ MOTD არ იყო გასაგზავნი. ეს MOTD არის მხოლოდ ის, რასაც სერვერი აგზავნის როდესაც აკავშირებთ, მაგრამ ეს არის კარგი მაჩვენებელი, თუ როდის შეგვიძლია დავიწყოთ არხებთან შეერთება.
- თქვენ უნდა გასცეს JOIN ბრძანება. ამ ბრძანებას შეიძლება მოჰყვეს ერთი ან მეტი არხი, რომლებიც გამოყოფილია მძიმით.
- გაითვალისწინეთ, რომ სერვერის მიერ გაგზავნილი მონაცემები მოხერხებულად არის განსაზღვრული ფართებით. ამ გზით ჩვენ შეგვიძლია მონაცემების გაყოფა და მითითება მასივის ინდექსის გამოყენებით.
ნაბიჯი 8. უპასუხეთ არხის შეტყობინებებს
ახლა რაც შეეხება სახალისო ნაწილს. თქვენი ბოტი შეუერთდა არხს, ასე რომ ახლა თქვენ შეგიძლიათ გამოიყენოთ ის რაც გინდოდათ. მოდით შევქმნათ ბრძანების მაგალითი სახელწოდებით @moo.
- გაითვალისწინეთ ოფსეტი, სადაც იწყება შეტყობინებები (ეს ეხება როგორც არხებს, ასევე პირად შეტყობინებებს). ის ყოველთვის ერთსა და იმავე ადგილზეა.
- თქვენ შეგიძლიათ გაუმკლავდეთ ბრძანებებს, სადაც მათ აქვთ სივრცე, დაჭრილი მონაცემების ერთმანეთთან შეერთებით ($ d). ეს სცილდება ამ სტატიის ფარგლებს.
- თუ სამიზნე არის არხი (როგორიცაა #botters-test), მაშინ თქვენ უპასუხეთ მას. თუ ეს პირადი შეტყობინებაა, ეს ბიტი იქნება თქვენი ბოტის მეტსახელი! შემდეგ თქვენ უნდა უპასუხოთ გამგზავნის მეტსახელს და არა თქვენს (წინააღმდეგ შემთხვევაში თქვენ საკუთარ თავს ესაუბრებით და ეს სულელურია).
ნაბიჯი 9. გააფართოვეთ თქვენი ბოტი
თქვენ შეგიძლიათ დაამატოთ ბევრი ახალი ფუნქცია ზემოაღნიშნული განხორციელების გამოყენებით. არსებობს მრავალი სხვა ბრძანება, რომელიც შეიძლება გაიცეს IRC ქსელში, როგორიცაა ოპერაციების მართვა, დარტყმა და აკრძალვა, თემის დაყენება და სხვა მრავალი ფუნქცია.
Რჩევები
-
თქვენ შეგიძლიათ გამოაქვეყნოთ "/me" ბრძანების შედეგი თქვენი შეტყობინებების ამონაწერით შემდეგნაირად:
- PRIVMSG #არხი: / 001 აქცია ტექსტი აქ / 001.
-
001 ნიშნავს ASCII სიმბოლოს 1 და განმარტებული იქნება როგორც ასეთი ორმაგი ციტირებული PHP სტრიქონში. ალტერნატიულად, შეგიძლიათ გამოიყენოთ
chr (1)
- სტრიქონის გარეთ.
- ფერები შეიძლება წარმოიშვას შეტყობინებაში "\ 003" (ASCII კოდი 3) პრეფიქსით, რასაც მოჰყვება რიცხვი ფერისთვის. 0 = თეთრი, 1 = შავი, 2 = ლურჯი, 3 = მწვანე, 4 = წითელი […]. იხილეთ mIRC– ის გვერდი მეტი ფერისთვის.
- თავაზიანობის მიზნით, მიიღეთ თქვენი არხის მფლობელების და IRC ოპერატორების თანხმობა თქვენი ბოტის ონლაინ შემოტანამდე. ყველა ქსელს და არხს არ აქვს მისასალმებელი პოლიტიკა ბოტების მიმართ, თუნდაც კარგად მოქცეული.
- ზოგიერთი IRC დემონები სცდება პროტოკოლის სპეციფიკაციებს და ახორციელებს სხვა ფუნქციებს. თუ თქვენ ამზადებთ მას კონკრეტული ქსელისთვის, რა თქმა უნდა შეგიძლიათ გამოიყენოთ ეს მახასიათებლები, თუ იცით მათი პროტოკოლის შესახებ. თუ გსურთ რომ თქვენი ბოტი განლაგდეს რამდენიმე ქსელში, ეცადეთ შეინარჩუნოთ ის რაც არის RFC– ში.