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

আজ আমি আপনাকে একটি প্রোগ্রাম শিখিয়ে যাচ্ছি বট জন্য আইআরসি। প্রথমত, যারা জানেন না তাদের জন্য, বট হ'ল এমন একটি প্রোগ্রাম যা একটি আইআরসি চ্যানেলের সাথে সংযোগ স্থাপন করে এবং এর সাথে ইন্টারঅ্যাক্ট করে, যা আমাদের উদাহরণস্বরূপ, ছাড়াই চ্যানেলকে মাঝারি করতে দেয় 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 »% চ্যান)
[/ কোড]

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

ক্যালিকোবট