Flex Coder
2.08K subscribers
366 photos
61 videos
2 files
328 links
Uɴʟᴇᴀsʜ Tʜᴇ Pᴏᴡᴇʀ Oғ Bᴏᴛ Cᴏᴅɪɴɢ. Gᴇᴛ Fʀᴇᴇ Bᴏᴛ & Cᴏᴅᴇ Oɴ Oᴜʀ Cʜᴀɴɴᴇʟ 🧑‍💻

🔰 Oᴜʀ Yᴏᴜᴛᴜʙᴇ Cʜᴀɴɴᴇʟ: https://www.youtube.com/@Flex_Coder

📞 Cᴏɴᴛᴀᴄᴛ Us Oɴ: @Flex_Help
🌐 Oɴʟɪɴᴇ Fʀᴏᴍ: 3-07-2024
Download Telegram
Add balance to user account 💸


📁 Filename: addBal.js
👨‍💻 Code:
const ADMIN_ID = process.env.ADMIN_ID;

  if (flex.user.id != ADMIN_ID) return;
  await sendMessage("*Enter your user id 🆔*", "MARKDOWN");
  await waitForAnswer("/getId");

📁 Filename: getId.js
👨‍💻 Code:
const ADMIN_ID = process.env.ADMIN_ID;
  if (flex.user.id != ADMIN_ID) return;
  await USER.setProperty("id", flex.message);
  await sendMessage("*Enter your balance 💸*", "MARKDOWN");
  await waitForAnswer("/getBal");

📁 Filename: getBal.js
👨‍💻 Code:
  const ADMIN_ID = process.env.ADMIN_ID;
  const id = await USER.getProperty("id");
  const btn = [
    [
      {
        text: "Claim Reward 🎉",
        callback_data: /claimBal ${id} ${flex.message} ,
      },
    ],
  ];
  if (flex.user.id != ADMIN_ID) return;

  await BOT.sendMessage(
    id,
    "*🎉 Congratulation you have get points from admin*\n\nClick following button to claim reward!!",
    "MARKDOWN",
    btn,
  );
  await sendMessage(*Point add request sended to *${id} , "MARKDOWN");
  await USER.deleteProperty("id");
  await clearWait();

📁 Filename: claimBal.js
👨‍💻 Code:
  const parts = flex.params.split(" ");
  const id = parts[0];
  const amount = parseFloat(parts[1]);
  if (flex.user.id != id) return;
  if (!isCallback) return;
  await FLEX.setProperty("balance", amount);
  await answerCallback("Balance added successfully ", true);

⚠️ Note: add your user id in .env file like ADMIN_ID=1234567890

#FlexGram
👍32👌2
🎉 FlexGram v1.0.1 is Here! 🎉

This update focuses on reducing boilerplate code and improving flexibility.

What's New

🔹 Smart Property Operations
getProp() and setProp() on BOT, USER, TEMP, and FLEX now support .add() and .remove().

• Numbers → add / subtract
• Strings → append / remove
• Arrays → push / filter

No more manual read-modify-write operations.

🔹 Flexible Options Object
chat_id and other options can now be placed anywhere inside the options object for all BOT and API methods.

BOT.sendMessage("Hello", { parse_mode: "HTML", chat_id: 123 })

API.sendMessage({ text: "Hello", chat_id: 123 })

No fixed parameter order required.

🔹 No More await
BOT, USER, TEMP, FLEX, API, and HTTP methods now handle promises automatically and log errors internally.

BOT.sendMessage("Hello")
Less code. Same result.

🔗 Check it out:
https://tinyurl.com/FlexGram

Star the project and comment features you'd like to see in the next FlexGram update 👇

❤️ Thank you for supporting FlexGram
👍3🐳2
📢 YouTube Channel Update

😔 Tomorrow's YouTube video was supposed to be uploaded, but unfortunately around 80% of the edited video got deleted.

I'm currently working on re-editing everything, which may take some extra time. Because of this, the video might be uploaded later tomorrow, or it may be released on another day.

🚀 I know I haven't uploaded for the past 2-3 weeks due to some issues, and now this video deletion problem has caused another delay. However, don't worry, the video is coming soon!

🔥 Also, there will be new FlexGram updates and other exciting improvements coming soon as well.

During the past few weeks when I couldn't upload videos, I was still working behind the scenes, fixing bugs, making updates, and launching new features. That's why you've seen some short videos and update posts instead. 💻

💝 Thank you for your patience and support.
👍32
New Video Uploaded 👇
https://youtu.be/uUkX1F71j1g

📹 Video Description:
In this tutorial, you'll learn how to create your own AI chat website for free using a Google AI Studio API Key, no paid subscription required. This is perfect for beginners and developers who want to build a ChatGPT-like AI chatbot, similar to Gemini or other popular AI chat tools, without spending a single rupee.

⚠️ Note: Subscribe Backup Channel: https://youtube.com/@flecdev
😍21👍1
Media is too big
VIEW IN TELEGRAM
This platform can host website for free & no sign up required 😱
👍3🎉2🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
😱 5 Secret VS CODE keyboard shortcuts that everyone should know
🐳21👍1
New Video Uploaded 👇
https://youtu.be/40leM39aRSs

📹 Video Description:
In this video, I have shown how you can create a Telegram AI Chatbot in just 10 minutes with amazing text editing animation effects. If you want to build your own AI chatbot for Telegram without spending hours coding, then this video is for you.

⚠️ Note: Subscribe Backup Channel: https://youtube.com/@flecdev
1👍1🙏1
New Video Uploaded 👇
https://youtu.be/XFMHjHuSMwg

📹 Video Description:
In this video, I have shown how you can create a Telegram bot that sends OTPs to email without coding in just 10 minutes. If you are a beginner and want to build an OTP sender bot quickly and easily, then this video is for you.

⚠️ Note: Subscribe Backup Channel: https://youtube.com/@flecdev
🔥1😁1
What topics would you like me to cover in future videos 🤔?

Drop your suggestions in the comments. I'm looking for new video ideas, so let me know what you'd like to learn, see, or explore next 👇
👍3🔥1🕊1
🌟 Automating client feedback loops on autopilot

Clients rarely fill out feedback forms emailed to them, but they'll tap a button in Telegram in two seconds. I built this lightweight flow to capture star ratings and text reviews directly inside our support chat. It stores the rating in memory, shifts the user context to wait for their text comments, and then commits everything to their persistent database profile in one seamless conversational experience.

📁 Filename:command/feedback.js
👨‍💻 Code:
sendMessage("How would you rate our service today?", {
buttons: [
[
{ text: " 1", command: "/rate 1" },
{ text: " 2", command: "/rate 2" },
{ text: " 3", command: "/rate 3" },
{ text: " 4", command: "/rate 4" },
{ text: " 5", command: "/rate 5" }
]
]
})


📁 Filename:command/rate.js
👨‍💻 Code:
TEMP.setProp("rating", params)
sendMessage("Awesome! Now, please type a short comment about your experience:")
waitForAnswer("save")


📁 Filename:command/save.js
👨‍💻 Code:
const rating = await TEMP.getProp("rating").value()
USER.setProp("last_rating", rating)
USER.setProp("last_comment", message)
sendMessage("Thank you! Your feedback has been saved securely.")
clearWait()


💡 Always remember to call clearWait() at the end of your waiting sequence, or your user will remain locked inside that input handler forever.

⚠️ Note: Make sure your FIREBASE_URL and FIREBASE_SECRET environment variables are configured so the persistent feedback data is successfully saved to your database.


#FlexGram
👍2🐳2
🛰️ Quick-and-dirty uptime monitor in 15 lines of code

I got tired of logging into heavy monitoring dashboards just to check if my clients' staging servers were still breathing during weekend deployments. So I built this ultra-lightweight uptime command panel that pings any endpoint on demand right inside Telegram. It uses Firebase to save your target endpoint and edits the interface in-place with inline callbacks so you aren't spamming your own chat history.

📁 Filename: command/monitor.js
👨‍💻 Code:
if (!params) return sendMessage("Provide a URL: `/monitor https://myapi.com`", { parse_mode: "Markdown" });
USER.setProp("url", params);
sendMessage(`Now tracking \`${params}\`. Click below to run a test.`, {
buttons: [{ text: "Check Status ", command: "/status" }],
parse_mode: "Markdown"
});


📁 Filename: command/status.js
👨‍💻 Code:
const url = await USER.getProp("url").value();
if (!url) return sendMessage("Set a URL first: `/monitor <url>`", { parse_mode: "Markdown" });
sendChatAction("typing");
const ok = await HTTP.get({ url }).then(() => true).catch(() => false);
const text = `*Uptime Monitor*\n\nURL: \`${url}\`\nStatus: ${ok ? " *ONLINE*" : "🚨 *OFFLINE*"}`;
const btns = [{ text: "🔄 Refresh Status", command: "/status" }];
if (isCallback) {
answerCallback(ok ? "Systems nominal!" : "Server unreachable!", !ok);
editCallbackMessage(text, btns, message_id);
} else {
sendMessage(text, { buttons: btns, parse_mode: "Markdown" });
}


💡 To prevent Telegram from hitting webhook timeouts, keep your monitored servers' cold starts under 5 seconds or the callback spinner might hang.

⚠️ Note: Ensure your target URLs include the full protocol like https:// to prevent HTTP client errors.


#FlexGram
👌2👍1🔥1
🔑 Shared office space hacks on a budget.

I had a local co-working client asking for a quick way to let members book phone booths without paying for heavy enterprise scheduling software. We solved it in an hour by building a shared dashboard right inside their Telegram group using Firebase-backed global state. When any member claims or vacates a room, the shared board updates in real-time for everyone else using snappy inline callbacks.

📁 Filename: command/rooms.js
👨‍💻 Code:
const r1 = await BOT.getProp("room1").value() || "Free";
const r2 = await BOT.getProp("room2").value() || "Free";
sendMessage("Quiet Room Bookings:\n\nRoom 1: " + r1 + "\nRoom 2: " + r2, {
buttons: [
[{ text: r1 === "Free" ? "🟢 Book Room 1" : "🔴 Vacate Room 1", command: "/book 1" }],
[{ text: r2 === "Free" ? "🟢 Book Room 2" : "🔴 Vacate Room 2", command: "/book 2" }]
]
});


📁 Filename: command/book.js
👨‍💻 Code:
const roomKey = "room" + params;
const current = await BOT.getProp(roomKey).value() || "Free";
const nextState = current === "Free" ? user.first_name : "Free";
BOT.setProp(roomKey, nextState);
answerCallback("Room " + params + " updated!");
const r1 = await BOT.getProp("room1").value() || "Free";
const r2 = await BOT.getProp("room2").value() || "Free";
editCallbackMessage("Quiet Room Bookings:\n\nRoom 1: " + r1 + "\nRoom 2: " + r2, [
[{ text: r1 === "Free" ? "🟢 Book Room 1" : "🔴 Vacate Room 1", command: "/book 1" }],
[{ text: r2 === "Free" ? "🟢 Book Room 2" : "🔴 Vacate Room 2", command: "/book 2" }]
], message_id);


Make sure you use BOT instead of USER properties here so the state updates globally for all members instead of being sandboxed to the clicking user. 🕒

⚠️ Note: Make sure your FIREBASE_URL and FIREBASE_SECRET environment variables are configured so the bot can persist the global room state across restarts.


#FlexGram
👍2🔥1
📦 Share npm packages directly in any chat

I got tired of constantly jumping back and forth to my browser just to grab npm package links when talking tech with clients and other devs. Using this sleek setup, you can search and share dependency details directly from your Telegram input box in any chat, or query it directly inside the bot.

📁 Filename: command/__inline__.js
👨‍💻 Code:
if (!inlineQuery) return;
const res = await HTTP.get({ url: `https://registry.npmjs.org/${encodeURIComponent(inlineQuery)}` });
if (res && res.name) {
API.answerInlineQuery({
inline_query_id: inlineQueryId,
results: [{
type: "article", id: res.name, title: res.name, description: res.description,
input_message_content: { message_text: `*${res.name}*\n${res.description || ""}\nhttps://www.npmjs.com/package/${res.name}`, parse_mode: "Markdown" }
}]
});
}


📁 Filename: command/npm.js
👨‍💻 Code:
if (!params) return sendMessage("Send package name");
sendChatAction("typing");
const res = await HTTP.get({ url: `https://registry.npmjs.org/${encodeURIComponent(params)}` });
if (!res || !res.name) return sendMessage("Not found");
sendMessage(`*${res.name}*\n${res.description || ""}\nhttps://www.npmjs.com/package/${res.name}`, { parse_mode: "Markdown" });


💡 Inline queries run on every keystroke, so the lightweight HTTP wrapper makes it incredibly snappy without lagging the user.

⚠️ Note: Remember to message @BotFather and send the /setinline command to enable inline mode for your bot before testing.


#FlexGram
🤩2👍1🔥1
🥐 Local bakery flash-sales on autopilot.

A local artisan bakery client wanted a dead-simple way to clear out their leftover daily inventory before closing time without relying on low-reach Instagram stories. We built them a lightning-fast VIP broadcast bot where neighborhood locals subscribe to get instant push alerts whenever fresh batches drop or flash discounts go live. The entire setup runs off Firebase and handles high-volume messaging without hitting Telegram API rate limits thanks to the framework's built-in throttled broadcast system.

📁 Filename: command/start.js
👨‍💻 Code:
const { setDB } = require('../core/firebase');
setDB(`subscribers/${user.id}`, true);
sendMessage('Welcome to the Bakery Alerts VIP club! 🥐 You will get notified the moment hot pastries are ready.');


📁 Filename: command/alert.js
👨‍💻 Code:
const { getDB } = require('../core/firebase');
if (user.id !== parseInt(process.env.ADMIN_ID)) return sendMessage('Unauthorized access.');
const subs = await getDB('subscribers') || {};
const ids = Object.keys(subs);
const res = await broadcast(ids, '🥐 *Warm pastries ready right now!* Get 30% off for the next 45 minutes.', [{ text: 'Get Code', command: '/claim' }], 100);
sendMessage(`Broadcast complete! Sent: ${res.sent}, Failed: ${res.failed}`);


📁 Filename: command/claim.js
👨‍💻 Code:
sendMessage('Show this code at the register to claim your 30% discount:\n\n*BAKERYVIP30*');


Use a 100ms throttle delay in the broadcast call to safely stay within Telegram's broadcast limits while keeping delivery fast.

⚠️ Note: You must add your Telegram user ID as the ADMIN_ID environment variable so only authorized staff can trigger the alerts.


#FlexGram
1👏1
I have decided to live stream on that what should we do 🤔?

Comment Down 👇
👍2🔥21
🐛 In-chat bug collector with zero web forms needed

I needed a smooth way for beta testers to submit structured bug reports without kicking them out to a external form. By chaining conversational steps with waitForAnswer and holding uncommitted input in TEMP memory, you can collect multiple user inputs sequentially and push a complete record to Firebase only when finished.

📁 Filename: command/report.js
👨‍💻 Code:
const prompt = "<b>Issue Reporter</b>\n\nPlease send a headline for the bug:";
sendMessage(prompt);
waitForAnswer("get_desc");


📁 Filename: command/get_desc.js
👨‍💻 Code:
TEMP.setProp("bug_title", message);
sendMessage("Got it. Now reply with full details or steps to reproduce:");
waitForAnswer("finish_report");


📁 Filename: command/finish_report.js
👨‍💻 Code:
const title = await TEMP.getProp("bug_title").value();
pushDB("bugs", { userId: user.id, title, desc: message });
TEMP.deleteProp("bug_title");
clearWait();
sendMessage("<b>Report logged!</b> Our team will review it shortly.");


💡 Always invoke clearWait() at the end of a multi-step conversation to ensure subsequent user messages revert to default command routing.

#FlexGram
👍1👏1
🎛️ Remote staging deploys right from your group chat

Context switching to cloud dashboards just to kick off a staging build during team discussions kills momentum. This setup gives your development team an inline command center to trigger webhooks, update shared deployment states, and modify the chat UI dynamically using callback queries. Team members see real-time updates instantly without cluttering the chat history with spam messages.

📁 Filename: command/staging.js
👨‍💻 Code:
sendChatAction("typing");
let current = await BOT.getProp("build_status").value() || "Ready";
sendMessage(`*Staging Control Panel*\nCurrent Status: *${current}*`, {
buttons: [
[{ text: "🚀 Deploy Staging", command: "/run_deploy" }],
[{ text: "🔄 Check Status", command: "/staging" }]
]
});


📁 Filename: command/run_deploy.js
👨‍💻 Code:
if (isCallback) {
await answerCallback("Initiating deploy sequence...", true);
await BOT.setProp("build_status", "Deploying...");
let res = await HTTP.post({
url: "https://api.github.com/repos/acme/app/dispatches",
body: { event_type: "deploy" }
});
let result = res ? "Deployed" : "Failed";
await BOT.setProp("build_status", result);
editCallbackMessage(`*Staging Control Panel*\nCurrent Status: *${result}*`, [
[{ text: "🔄 Refresh Status", command: "/staging" }]
], message_id);
}


💡 Always use editCallbackMessage when responding to inline buttons to update the interface in place without flooding chat history with redundant messages.

⚠️ Note: Replace the target URL in HTTP.post with your CI/CD pipeline or GitHub action dispatch webhook.


#FlexGram
👍1😁1
💱 Instant currency conversion for remote teams in Telegram

Managing international contractors means constantly checking conversions before approving invoices or budget requests. Instead of leaving Telegram to look up exchange rates, this lightweight setup lets users store their default base currency in Firebase state and pull live rates instantly using the built-in HTTP client.

📁 Filename: setbase.js
👨‍💻 Code:
if (!params[0]) return sendMessage("Usage: /setbase USD");
let code = params[0].toUpperCase();
USER.setProperty("base", code);
sendMessage(`Base currency updated to *${code}*`);


📁 Filename: base.js
👨‍💻 Code:
let base = await USER.getProp("base").value();
let current = base || "USD";
sendMessage(`Your active currency preference is set to *${current}*`);


📁 Filename: convert.js
👨‍💻 Code:
let amount = parseFloat(params[0]) || 100;
let target = (params[1] || "EUR").toUpperCase();
let base = (await USER.getProp("base").value()) || "USD";
sendChatAction("typing");
let data = await HTTP.get({ url: `https://open.er-api.com/v6/latest/${base}` });
let rate = data?.rates?.[target];
if (!rate) return sendMessage("Conversion failed. Check currency codes.");
let converted = (amount * rate).toFixed(2);
sendMessage(`*${amount} ${base}* = *${converted} ${target}*`);


💡 Persistent user properties saved via USER remain available across server restarts without needing manual DB schemas.

#FlexGram
👍1👌1
🎟️ In-group event RSVP tracker with live atomic seat count

Running community meetups usually means wrestling with third-party event forms that half the members forget to fill out. I set up a quick RSVP system directly inside our Telegram group using Firebase-backed persistent state. Users claim or cancel spots with single commands, while global atomic counters prevent overbooking without needing a custom database layer.

📁 Filename: command/rsvp.js
👨‍💻 Code:
const rsvp = await USER.getProp('rsvp').value();
if (rsvp) return sendMessage('You already reserved a spot for this meetup!');
const count = await BOT.getProp('rsvps').value() || 0;
if (count >= 30) return sendMessage('Sorry, this meetup is completely full!');
await USER.setProp('rsvp', true);
await BOT.getProp('rsvps').add(1);
sendMessage(`*RSVP Confirmed!* You bagged spot #${count + 1} of 30.`);


📁 Filename: command/cancel.js
👨‍💻 Code:
const rsvp = await USER.getProp('rsvp').value();
if (!rsvp) return sendMessage('You do not have an active spot reserved.');
await USER.deleteProp('rsvp');
await BOT.getProp('rsvps').add(-1);
sendMessage('Your reservation was canceled and the spot is back open.');


📁 Filename: command/status.js
👨‍💻 Code:
const count = await BOT.getProp('rsvps').value() || 0;
const left = Math.max(0, 30 - count);
sendMessage(`*Meetup Capacity Status*\n\nBooked spots: ${count}/30\nRemaining spots: ${left}`);


💡 Passing negative numbers to .add() safely decrements persistent global counters without manual arithmetic transactions.
⚠️ Note: Ensure FIREBASE_URL and FIREBASE_SECRET are configured in your environment variables so persistent state works seamlessly.


#FlexGram
🤩2
Share code snippets in any chat without leaving Telegram

Jumping back and forth between text editors and Telegram just to share repeated boilerplate or setup commands in tech groups gets exhausting fast. By leveraging FlexGram's built-in inline query support, you can search and drop formatted code blocks directly into any chat window. Here is a clean multi-file pattern using shared Firebase state to add and inline-search snippets globally.

📁 Filename: addsnippet.js
👨‍💻 Code:
if (!params) return sendMessage("Usage: /addsnippet Title | Code");
const [title, code] = params.split("|").map(s => s.trim());
if (!title || !code) return sendMessage("Provide both title and code split by |");
const list = (await BOT.getProp("snippets").value()) || [];
list.push({ title, code });
await BOT.setProperty("snippets", list);
sendMessage(`*Snippet saved!* Type \`@yourbot ${title}\` in any chat to use it.`);


📁 Filename: __inline__.js
👨‍💻 Code:
const query = inlineQuery.toLowerCase();
const list = (await BOT.getProp("snippets").value()) || [];
const matches = list.filter(item => item.title.toLowerCase().includes(query));
const results = matches.map((item, id) => ({
type: "article",
id: String(id),
title: item.title,
input_message_content: { message_text: `\`\`\`\n${item.code}\n\`\`\``, parse_mode: "Markdown" }
}));
answerInlineQuery(results);


💡 Turn on Inline Mode via BotFather with /setinline so Telegram triggers inline suggestions in your message bar.

#FlexGram
👍1🔥1