[পাইথন] আইআরসি-র জন্য একটি বট প্রোগ্রাম

আজ আমি আপনাকে একটি প্রোগ্রাম শিখিয়ে যাচ্ছি বট জন্য আইআরসি। প্রথমত, যারা জানেন না তাদের জন্য, বট হ'ল এমন একটি প্রোগ্রাম যা একটি আইআরসি চ্যানেলের সাথে সংযোগ স্থাপন করে এবং এর সাথে ইন্টারঅ্যাক্ট করে, যা আমাদের উদাহরণস্বরূপ, ছাড়াই চ্যানেলকে মাঝারি করতে দেয় allows যে আমরা সংযুক্ত এবং এইভাবে স্প্যাম এড়ান, বা এটি আদেশের একটি সিরিজ স্বীকৃতি দেয় এবং সংশ্লিষ্ট কোডটি কার্যকর করে।
যদিও ইতিমধ্যে বট প্রস্তুত রয়েছে, আমি তাদের মধ্যে সত্যই যারা তাদের নিজস্ব প্রোগ্রামগুলি শিখতে তৈরি করতে পছন্দ করে এবং এটি কাজ করে দেখার পরে আমাদের যে প্রচুর তৃপ্তি দেয় of

এই বলে, আসুন টিউটোরিয়ালটি এগিয়ে চলুন।

বট প্রোগ্রাম করার জন্য আমাদের একটি দরকার হবে সরল পাঠ্য সম্পাদক cualquiera (ন্যানো, গেডিট, ধ্যান ইত্যাদি) এবং পাইথন দোভাষী (২.2.6 বা ২.2.7 প্রয়োজন হবে, অজগর 3.x দিয়ে কাজ করে না).

প্রথমে আমরা আমদানি করি প্রয়োজনীয় মডিউল, এক্ষেত্রে আমাদের কেবল দুটি প্রয়োজন হবে:

[কোড] #! / usr / বিন / এনভিভ পাইথন
# - * - কোডিং: utf-8 - * -

আমদানি সকেট
আমদানি স্ট্রিং
[/ কোড]

এখন আমরা এগিয়ে যান সেট আপ বট:

[কোড] HOST=»irc.desdelinux.net»
পোর্ট = 6667
নিক = »ক্যালিকোবট
আইডেন্ট = »ক্যালিকোবট
REALNAME = »CalicoBot
চ্যান = »# হোম»
রিডবফার = »»
[/ কোড]

আমি প্রতিটি পরিবর্তনশীল ব্যাখ্যা করব:

  • host: যে সার্ভারের সাথে আমরা সংযোগ করব তার URL
  • পোর্ট: সার্ভার পোর্ট ডিফল্টরূপে এটি 6667।
  • নিক, আইডেন্ট এবং বাস্তব নাম: তারা বটের ডাক নাম, এটির সনাক্তকরণ এবং আসল নামের সাথে মিল রাখে।
  • চ্যান: চ্যানেলটি বটটি প্রবেশ করবে
  • রিডবফার: এই ভেরিয়েবলে সার্ভারের মাধ্যমে প্রেরিত ডেটা সংরক্ষণ করা হবে।

আমাদের বটটি কনফিগার হয়ে গেলে আমরা এগিয়ে যাই সংযোগ

[কোড] গুলি = সকেট.সকেট ()
s.con সংযুক্ত ((হোস্ট, পোর্ট))
s.send ("নিক% s \ r \ n"% নিক)
s.send ("ব্যবহারকারী% s% s বেল:% s \ r \ n"% (আইডেন্ট, হোস্ট, রিয়েল নাম))
s.send ("যোগদান:% s \ r \ n"% চ্যান)
[/ কোড]

প্রথম লাইনে অনেক রহস্য নেই, দ্বিতীয়টি তৈরি করে সার্ভার সংযোগ এবং শেষ তিনটি লগইন সহ এগিয়ে যাওয়ার জন্য বটের ডেটা সার্ভারে প্রেরণ করে।

একবার সংযুক্ত হয়ে আমরা একটি তৈরি করব অগণিত চক্র যা আমরা যেতে হবে সার্ভার থেকে / থেকে ডেটা গ্রহণ এবং প্রেরণ:

[কোড] যখন 1:
রিডবফার = রিডবফার + এস.আরসিভি (1024)
টেম্প = স্ট্রিং.স্প্লিট (রিডবফার, "\ n")
readbuffer = temp.pop ()
টেম্পল লাইনে:
লাইন = স্ট্রিং.স্ট্রিপ (লাইন)
লাইন = লাইন.স্প্লিট (চান + ':')

যদি লাইন [0] .ফাইন্ড ("পিং")! = -1:
পিংগিড = লাইন [0] .স্প্লিট () [1] এসেন্ড ("পং% s \ r \ n"% পিংগিড)
[/ কোড]

উপরে লেখা সমস্ত পংক্তির মধ্যে, আমি কেবল গুরুত্বপূর্ণগুলিতেই মন্তব্য করব।
বিরূদ্ধে লাইন = লাইন.স্প্লিট (চান + ':') আমরা যা করি তা হ'ল সার্ভার যখন আমাদের প্রেরণ করে তখনই তাকে ভাগ করে চ্যানেল থেকে কিছু পেতে দিন।
উদাহরণস্বরূপ নীচের লাইনটি ইঙ্গিত দেয় যে কেউ চ্যানেলে কিছু লিখেছেন:

:son_link!sonlink@127.0.0.1 PRIVMSG #Home :Hola ^^

প্রথমটি হ'ল ব্যবহারকারীর ডাকনাম এবং সংযোগ ডেটা (দ্বারা পৃথক!), আদেশটি (এই ক্ষেত্রে এটি নির্দেশ করে যে তিনি লিখেছিলেন), চ্যানেল এবং শেষ পর্যন্ত, কোলনের পরে, বার্তা প্রেরণ করা হয়েছিল। আমি আরও অনেক কমান্ড ব্যাখ্যা করব না যেহেতু এটি এই টিউটোরিয়ালের মধ্যে পড়ে না।

অন্যান্য গুরুত্বপূর্ণ লাইনগুলি হ'ল তারা যদি হয় পরে। সার্ভারটি প্রায়শই প্রায়শই PING কমান্ড প্রেরণ করে যে ব্যবহারকারী এখনও সংযুক্ত আছে কিনা তা পরীক্ষা করে। সেক্ষেত্রে, বটটি একটি আইডি দিয়ে পং কমান্ডটি প্রেরণ করে যা পিংটি সার্ভারের কাছে নির্দেশ দেয় যে এটি এখনও সংযুক্ত রয়েছে।

এটি দিয়ে আমাদের ইতিমধ্যে বটের ভিত্তি রয়েছে। এখন আমি কীভাবে বটকে প্রতিক্রিয়া জানাতে পারি তা নির্দিষ্ট করে আমরা যেমন কমান্ড দিতে চাই, তা আইআরসি থেকেই হোক বা ব্যবহারকারীদের থেকে।

আইআরসি আদেশের প্রতিক্রিয়া:

পিং এবং PRIVMSG আইআরসি কমান্ডের উদাহরণ। অনেকগুলি কমান্ড রয়েছে তবে আমি আগেই বলেছি এটি এমন একটি বিষয় যা আমি বিস্তারিতভাবে যাব না।
উদাহরণস্বরূপ, আমরা সংযোগকারী ব্যবহারকারীদের বটকে হ্যালো বলতে পারি:

[কোড] লাইন থাকলে [0] .ফাইন্ড ('যোগ দিন')! = -1:
নাম = লাইন [0] .স্প্লিট ('!') [0] .স্প্লিট (':') [1] নাম যদি! = নিক এবং নাম.ফাইন্ড (HOST) == -1:
s.send ("PRIVMSG% s: স্বাগতম%% s ^^" n "% (চ্যান, নাম))
[/ কোড]

সার্ভার কমান্ডটি প্রেরণ করে কিনা তা আমরা প্রথমে পরীক্ষা করে দেখি JOIN যা ইঙ্গিত দেয় যে কেউ সার্ভারের সাথে সংযুক্ত রয়েছে। তারপরে আমরা নিকটি বের করি, আমরা পরীক্ষা করে দেখি যে নিকটি আইআরসি ইউআরএল নয় (যদি না আমরা বট চালানোর সাথে সাথে এটি ইউআরএলকে স্বাগত জানায়) এবং অবশেষে আমরা শুভেচ্ছা বার্তা প্রেরণ।

বট কমান্ড:

এখন আমি আমার বটটি কীভাবে করব আমার নিজস্ব কমান্ড সাড়া? আসুন আরও একটি উদাহরণ দেখুন:

[কোড] লাইন থাকলে [1] == '$ সংস্করণ':
s.send (IV PRIVMSG% s: CalicoBot 0.1.2 (c) 2012 পুত্র লিংক \ n »% চ্যান)
[/ কোড]

এই উদাহরণে যদি কেউ লিখেন । সংস্করণ বট বার্তাটি এর নাম, সংস্করণ এবং লেখককে দেখায়। উদাহরণটির সম্পূর্ণ কোডটি হ'ল:

[কোড] সকেট আমদানি করুন
আমদানি স্ট্রিং

HOST = »লোকালহোস্ট
পোর্ট = 6667
নিক = »ক্যালিকোবট
আইডেন্ট = »ক্যালিকোবট
REALNAME = »CalicoBot
চ্যান = »# হোম»
রিডবফার = »»
s = সকেট.সকেট ()
s.con সংযুক্ত ((হোস্ট, পোর্ট))
s.send ("নিক% s \ r \ n"% নিক)
s.send ("ব্যবহারকারী% s% s বেল:% s \ r \ n"% (আইডেন্ট, হোস্ট, রিয়েল নাম))
s.send ("যোগদান:% s \ r \ n"% চ্যান)

যখন 1:

রিডবফার = রিডবফার + এস.আরসিভি (1024)
টেম্প = স্ট্রিং.স্প্লিট (রিডবফার, "\ n")
readbuffer = temp.pop ()
টেম্পল লাইনে:
মুদ্রণ লাইন
লাইন = স্ট্রিং.স্ট্রিপ (লাইন)
লাইন = লাইন.স্প্লিট (চান + ':')

যদি লাইন [0] .ফাইন্ড ("পিং")! = -1:
পিংগিড = লাইন [0] .স্প্লিট () [1] এসেন্ড ("পং% s \ r \ n"% পিংগিড)

যদি লাইন [0] .ফাইন্ড ('যোগ দিন')! = -1:
নাম = লাইন [0] .স্প্লিট ('!') [0] .স্প্লিট (':') [1] নাম যদি! = নিক এবং নাম.ফাইন্ড (HOST) == -1:
s.send ("PRIVMSG% s: স্বাগতম%% s ^^" n "% (চ্যান, নাম))

যদি লেন (লাইন) <1:
যদি লাইন [1] == '$ সংস্করণ':
s.send (IV PRIVMSG% s: CalicoBot 0.1.2 (c) 2012 পুত্র লিংক \ n »% চ্যান)
[/ কোড]

আমি আশা করি আপনি এই টিউটোরিয়ালটি পছন্দ করেছেন এবং অবশ্যই আমি আপনাকে আমার বটের কোডের লিঙ্কটি রেখে দিচ্ছি যাতে আপনি এর কোডটি পুরো দেখতে পান এবং এটি কীভাবে কাজ করে তা আপনি আরও ভাল করে দেখতে পারেন (যদিও আমি ব্যক্তিগত ব্যবহারের জন্য কিছু কমান্ড সরিয়ে ফেলেছি)।

ক্যালিকোবট


আপনার মন্তব্য দিন

আপনার ইমেল ঠিকানা প্রকাশিত হবে না। প্রয়োজনীয় ক্ষেত্রগুলি দিয়ে চিহ্নিত করা *

*

*

  1. ডেটার জন্য দায়বদ্ধ: মিগুয়েল অ্যাঞ্জেল গাটান
  2. ডেটার উদ্দেশ্য: নিয়ন্ত্রণ স্প্যাম, মন্তব্য পরিচালনা।
  3. আইনীকরণ: আপনার সম্মতি
  4. তথ্য যোগাযোগ: ডেটা আইনি বাধ্যবাধকতা ব্যতীত তৃতীয় পক্ষের কাছে জানানো হবে না।
  5. ডেটা স্টোরেজ: ওসেন্টাস নেটওয়ার্কস (ইইউ) দ্বারা হোস্ট করা ডেটাবেস
  6. অধিকার: যে কোনও সময় আপনি আপনার তথ্য সীমাবদ্ধ করতে, পুনরুদ্ধার করতে এবং মুছতে পারেন।

  1.   অ্যারোজেডএক্স তিনি বলেন

    হেই, আমি আইআরসি-তে চালিত বুলশিটের বটটি মিস করতে পারি না 😛 খুব আকর্ষণীয় নিবন্ধ।

  2.   ক্ষান্তি তিনি বলেন

    খুব সহজ এবং স্পষ্ট ব্যাখ্যা।
    কি যদি, পাইথন কোড সমস্ত ইন্ডেন্টেশন অনুপস্থিত।

  3.   Rafa তিনি বলেন

    বট প্রোগ্রাম করার জন্য একটি দুর্দান্ত আর্টিকেল এবং কোনও আইআরসি-র সাথে সংযোগ স্থাপন করা কত সহজ:)…

    এটি আমাকে সেই সময়গুলির স্মরণ করিয়ে দেয় যখন আমরা এমএসএনসি বা এমএসএনগ্রুপ চ্যাটে এমআইআরসি-র স্ক্রিপ্ট লেখার মতো প্রোগ্রামারদের মতো অনুভব করি

  4.   ট্রুকো 22 তিনি বলেন

    আকর্ষণীয় আমি এটি রাখা 😀

  5.   জেনেসিস ভার্গাস জে। (@ প্রিপ্রিসিওডিয়েটো) তিনি বলেন

    চমৎকার !!

  6.   এলিনেক্স তিনি বলেন

    খুব দরকারী, ধন্যবাদ Son_Link!

    গ্রিটিংস!

  7.   ডিবিিলিক্স তিনি বলেন

    চিয়ার্স ...

    আপনার লাইন অনুসরণ এবং কাজ করে যে একমাত্র জিনিস পরীক্ষা
    আমদানি সকেট
    আমদানি স্ট্রিং

    HOST = »লোকালহোস্ট
    পোর্ট = 6667
    নিক = »ক্যালিকোবট
    আইডেন্ট = »ক্যালিকোবট
    REALNAME = »CalicoBot
    চ্যান = »# হোম»
    রিডবফার = »»
    s = সকেট.সকেট ()
    s.con সংযুক্ত ((হোস্ট, পোর্ট))
    s.send ("NICK% srn"% NICK)
    s.send ("ব্যবহারকারী% s% s bla:% srn"% (আইডেন্ট, হোস্ট, রিয়েল নাম))
    s.send ("যোগদান:% srn"% চ্যান)

    চ্যানেল পরিবর্তন করে এখন নিক নীচে আমাকে ত্রুটি সিনট্যাক্স ছুঁড়েছে

    আমি অন্যান্য পরিচিতদের জিজ্ঞাসা করেছি এবং তারা আমাকে বলেছে যে এটি অজগরটির মতো দেখাচ্ছে না

    আমি জানি না আমি কী ভুল করছি বা আমি কেন সমস্ত কিছু অনুলিপি করে পাইথনে আটকান এবং এটিকে প্রবেশ দিচ্ছি এবং এটি চ্যানেলের সাথে সংযোগ স্থাপন করেছে তবে 250 সেকেন্ড পরে চ্যানেল এটিকে সরিয়ে দেয় কারণ পংয়ের কাছ থেকে কোনও সাড়া পাওয়া যায়নি ...

  8.   পিনফ্রি তিনি বলেন

    সম্পূর্ণ কোডটি আমার পক্ষে কাজ করে না, শেষ অনুচ্ছেদটি যা ব্যর্থ হয় এবং আমি ত্রুটিটি খুঁজে পাই না। যদি আমি সেই অংশটি মুছে ফেলি তবে এটি সংযোগ করে এবং পুরোপুরি কাজ করে। উইন্ডোজ on তে পাইথন ২. 2.7.3..৩ নিয়ে পরীক্ষা করা হয়েছে।

    PS: আমার ক্ষেত্রে আমি একটি পাসওয়ার্ড সহ একটি সার্ভারের সাথে সংযোগ করি এবং এই লাইনগুলি যুক্ত করি:
    পাস = »পাসডেলবট
    s.send ("পাস% s \ r \ n"% পাস)

  9.   ডওএলপিএইচএন তিনি বলেন

    হাই ছেলে লিংক, নিবন্ধটির জন্য আপনাকে অনেক ধন্যবাদ, এটি খুব আকর্ষণীয়, আমি কেবল প্রেরিত আদেশগুলির প্রতিক্রিয়া জানাতে পারি না। প্রোগ্রামটি শেষের দিকে যায় না এবং কেন আমি বুঝতে পারি না: "যদি লেন (লাইন)> 1:"
    আমি আপনার উত্তর অপেক্ষা.
    এবং Gracias