Tag: Bot

  • Deno and Deno Deploy™

    Deno and Deno Deploy™

    আমি আজ সহ লাগাতার ৩ দিন ডিনো এবং ডিনো ডিপ্লয় নিয়ে গবেষণা করছি। বেশ মজাই লাগছে। ডিনো প্রথমবার ব্যবহার করেছিলাম মাসখানেক আগে, জুনের শুরুতে সম্ভবত।

    ডিনো ডিপ্লয় এ KV & CRON আছে, যদিও এখন তা বেটা পর্যায়ে। আমি KV কেভি প্রথম দেখেছিলাম ক্লাউডফ্লেয়ারে। সেখানে KV+R2+PAGES এর সমন্বয়ে বেশ জটিল জিনিস বেশ সহজেই বানিয়ে ফেলা যায়।

    ১ম দিন- ১৪ জুলাই বেশি সুস্থ ছিলাম না। কিন্তু ১৫ তারিখে কাজ বেশ এগিয়ে গিয়েছিলো (একইদিনে svelte এর প্রজেক্টও github action দিয়ে deno deploy তে ডিপ্লয় করে বেশ ভাল পার্ফরম্যান্স পেয়ছিলাম, সেইসাথে CI/CD এর বাস্তব অভিজ্ঞতাও বৃদ্ধি পেয়েছিল), এবং আজ ১৬ তারিখ।

    ক্লাউডফ্লেয়ারে একদিন KV দেখার পর মনে হলো- আরো কোথাও KV দেখেছিলাম। কোথায়?

    খুব দ্রুতই মনে এসেছে, Deno Deploy™ তে!

    তারপর শুরু করলাম গবেষণা। গবেষণার বিষয়-

    ১। সেখানে ডিসকর্ড বট ২৪/৭ চালু রাখা যায় কিনা

    ২। যদি না যায়, তাহলে কোনো বিশেষ উপায়ে/হ্যাক ব্যবহার করে হলেও করা যাবে কিনা।

    আমার এখন পর্যন্ত উপলব্ধি হচ্ছে-

    ১। ডিনো ডিপ্লয় ব্যবহার করে একবার প্রজেক্ট/কোড পাব্লিশ/ডিপ্লয় করলে সেটা একবার চালু হলেও সামান্য পরিবর্তন করে আবার ডিপ্লয় করলে দুইবার কোড রান হয়। Deno.cron প্রতিমিনিটে দিয়ে দেখেছি- সেটা দুইবার করে হয় না, তবে node-cron ব্যবহার করলে সেটা একাধিকবার একই কাজ করতে থাকে। সর্বশেষ হিসাব অনুযায়ী ৬ মিনিট পর দুইবার না করে একবার করে। (৩ বার ডিপ্লয় করলে হয়ত একবার কমবে, আরো পরে ২য়টাও কমবে)

    তবে একবার ১ এ নেমে আসলে আবার ডুপ্লিকেট হবে না, এমন না। আবার হবে, যে কোনো সময়। এবং তা অটোমেটিক বন্ধও হবে।

    ২। new Map() এর ভিতরে ইউজারের ডিসকর্ড ভয়েস চ্যানেলে জয়েন টাইম সেভ রাখতাম, কিন্তু ডিনো ক্রোন মাঝে মাঝে প্রতি মিনিটের কাজ মিস করে, খুব সম্ভবত তখনই ডাটা হারিয়ে যায়। তাই KV ব্যবহার করি, ডাটা হারানো বন্ধ হয়।

  • A Discord bot

    A Discord bot

    প্রাথমিক ফিচার

    আমার ভাইয়ের জন্য বানানো ডিসকর্ড বটের মূল এবং প্রাথমিক রিকয়ারমেন্ট ছিলো শুধু একটি।

    সেটি হচ্ছে- ডিসকর্ড সার্ভারের ভয়েস চ্যানেলে কেউ জয়েন বা লিভ করলে বট যেন তার নাম একটি প্রাইভেট টেক্সট চ্যানেলে ম্যাসেজ পাঠায়।

    এতটুকু একজন পাইথন দিয়ে বানিয়ে দিয়েছিলো। কিন্তু uptimebot এর ফ্রি টায়ারে পরিবর্তন আনায় সেটা আর কাজ করছিলো না।

    বটের ম্যাসেজ,

    Omuk has joined General 1 at 09:06:34 PM

    Omuk has left General 1 at 11:01:02 PM

    সেশন টাইম

    discord.js দিয়ে বানানোর পর শুধু এতটুকু আমার যথেষ্ট মনে হচ্ছিলো না, তাই যখন কেউ লিভ নেবে, তখন সে কতক্ষণ ছিলো সেটা দেখানোর জন্য new Map() তৈরি করে সেখানে জয়েন টাইম স্টোর করি, লিভ নেয়ার সময় বর্তমান সময়ের সাথে বিয়োগ করে সেশন টাইম বের করি।

    এবার কেউ লিভ নিলে সহজেই জানা যায় যে- সে কতক্ষণ ছিলো।

    Omuk has left General 1 at 11:01:02 PM (session time 01:54:27)

    CRON

    তারপর আরেক ফিচার যুক্ত করতে ইচ্ছা হয়- প্রতিদিন ইংরেজি, বাংলা এবং আরবী তারিখ দেখানো। তার জন্য node-cron moment-hijri date-bengali-revised এই ৩টি প্যাকেজ ইন্সটল করে কোড যুক্ত করি।

    যেহেতু বাংলাদেশের হিজরী তারিখ সৌদি আরবের চেয়ে একদিন কম থাকে, তাই বর্তমান সময়ের/তারিখের হিজরী তারিখ না নিয়ে ২৪ ঘণ্টা আগের হিজরী তারিখ নিতে হয়।

    স্ল্যাশ কমান্ড

    স্ল্যাশ কমান্ডও পরীক্ষামূলকভাবে যুক্ত করলেও সেটা আর বাস্তবায়ন করা হয়নি। কাজ ছিলো, /msg লিখে এন্টার/টাচ দিলে ৩টি ফিল্ড আসবে, কতক্ষণ পর, কাকে, কী ম্যাসেজ দিতে চান। সেই বট নির্দিষ্ট সময়ে প্রাপককে সেই ম্যাসেজ দিয়ে দেবে।

    এখন যদি প্রাপক বটকে রিপ্লাই দেয়? সেটার জন্য আরো কোড যুক্ত করতে হয়, ফলে বট তার পাঠানো ম্যাসেজে নির্দিষ্ট সময়ের মধ্যে রিপ্লাই দিলে সেটা গ্রহণ করবে এবং সেন্ডারকে জানিয়ে দেবে।

    এবং সবশেষে- একটু ফানি কিছু করতে ইচ্ছে হয়। তাই ডিসকর্ডে আরেকটি টেক্সট চ্যানেল খুলে সেটিতে প্রতি ঘন্টায় একটি করে (পরে দিনে দুইবার) one-liner/dad-jokes পোস্ট করার জন্য cron.schedule করি। এপিআই ব্যবহার করি https://api-ninjas.com/

    গিটহাব রিপো লিংক https://github.com/2u841r/vc-watcher-discord-bot

  • My first day of AWS

    My first day of AWS

    সমস্যা

    আমার বড়ভাইয়ের একটি ডিসকর্ড সার্ভার আছে, সেটায় একজন একটা বট সেট করে দিয়েছিলো। সেই বট গত মার্চের শুরুতে কাজ করা বন্ধ করে দিয়েছে।

    বটের কাজ ছিলো- কেউ সার্ভারে ভয়েস চ্যানেলে আসলে তার নাম, চ্যানেলের নাম ও সময় একটি প্রাইভেট চ্যানেলে সেভ করা। অনুপস্থিতে / কয়েক সেকেন্ডের জন্য কেউ এসে চলে গেলে কে এসেছিলো তা দেখার কাগে লাগে।

    বট বন্ধ হওয়ার কারণঃ

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

    repl.it তাদের ফ্রি প্ল্যান বন্ধ করে দিয়েছে, পুরান লিংক বন্ধ করে দিয়েছে। ফলে uptimebot যে লিঙ্কে নির্দিষ্ট সময় পরপর রিকুয়েস্ট করতো, সেই লিংক ভ্যালিড ছিলো না। ।

    uptimebot এ আগে ফ্রিতে কতক্ষণ পর পর রিকোয়েস্ট পাঠানো যেতো, জানি না। কিন্তু এখন ৫ মিনিটের কমে যায় না, সেক্ষেত্রে ফ্রি প্ল্যান নিতে হয়।

    সমাধানের পর

    discordjs দিয়ে সমাধানের পর মূলত দেখেছি যে- ফ্রিতে ২৪/৭ হোস্ট করার কোনো ফ্রি ও নির্ভরযোগ্য কোনো উপায়ই নেই!

    আমি বা ভাইয়া বা ৩য় কেউ নিজের কম্পিউটার 24/7 চালু করে রাখতে হবে।
    হয়ত কোড পাবলিক করে রাখতে হবে, সেক্ষেত্রে ডিসকর্ড অ্যাক্সেস টোকেন ঝুঁকিতে পড়ে যাবে।
    আর ভার্সেল/সার্ভারলেস তো এসবের জন্য না।

    তাই আর দেরি না করে aws ১ বছরের ট্রায়াল শুরু করে দিলাম। ভবিষ্যতে হয়ত azure এর ১ বছরও নেবো। (যদি ততদিনে থাকে আরকি)। গুগল ক্লাউড, ডিজিটাল ওশ্যান ২০০-৩০০ ডলার ক্রেডিট যাই দেয়, তা ৬০-৯০ দিনের মেয়াদে দেয়, যা খুব একটা লোভনীয় না। তবুও যথাসময়ে হয়ত নেবো।

    AWS EC2 details

    Amazon Machine Image (AMI): Amazon Linux AMI 2023

    Instance type: tc.micro (2 vcpu, 1 GiB memory, $0.0108/per hour after trial)

    Storage: Storage Type: EBS, Volume Type GP3, 10 GB (total limit in trial: 30 GB)

    যদিও পরে বুঝেছি ৫ জিবি দিলেই ubuntu + আমার কাজের জন্য জন্য যথেষ্ট হতো। যাইহোক, আরো কত কিছুই তো করতে হবে।