Telegram Bot which sends any member of a Group a DM - telegram

is there any Telegram bot out there which can send a private message to any member of a Group(where I am not the owner). If not, how would the procedure look like to build one?

That's not possible. For a bot to be able to send a message to a user, the user must have initiated a conversation with the bot first. Moreover, bots can't even get the list of members of groups or channels, especially not private ones (via the bot api).

Related

Telegram BOT - How to get chat ID of users in my group?

I've been using a Telegram BOT to send notifications for a group, and for users.
I already know i can get Chat ID by receiving a message from the user on my bot, using getUpdates.
I also know i can get Group ID using the same method...
But what i really need is:
There is three users in my group.
My bot.
Me.
Another user that didn't sent any messages to my bot so it does not appear on getUpdates
Is it possible to get this third user his ID?
PS: I am the group owner, and also added my bot as Admin...
The third user is a normal user.
Can someone help me?
Thanks!
That's not possible with the offical Telegram Bot API
Possible Workarounds:
Hold a list of your own. If a user is joining (new_chat_member), lefting (left_chat_member), somebody is sending a message in the group, and so on. Check Message for more information.
Check if a user is a member of the group with getChatMember.
Also may be helpful: getChatMembersCount and getChatAdministrators

Do bots have their own Chat IDs?

Do bots have chat_id like user accounts? Where can I find it? I want to use it to send messages to my bot using pyrogram.
Chat IDs are the same for everyone that accesses that chat. In private messages (1-to-1 chats), chat_id == user_id.
Two Examples:
The chat_id of #PyrogramChat is -1001387666944, no matter who accesses or retrieves it.
#PyrogramBot has the user_id 483849041, to send it a message you can use that ID as the chat_id.
As for how to send messages, see the Documentation.
Yes they do, bot tokens are in that format - BOT_ID:SOME_STUFF, in here BOT_ID is your bot's id.

Make Telegram bot to read only /commands as administrator

I am using Telegram bot API with AWS Lambda and Zappa.
Everything was working fine. Until I realised that bot's webhook is being called everytime whenever a message is sent by anyone in the group.
I want to limit this webhook requests, as Lambda allows for only 1 million calls which is sufficient if bot is invoked, but only when /commands are called.
As I have to pin and edit messages using bot, that's why administrator permission is must.
I just want my bot to respond only to /commands along with administrator rights.
Please help me in tackling this issue.
I am assuming you added your bot to a Telegram group. In this case, the first thing that you need is group id. This should help: https://github.com/GabrielRF/telegram-id#web-group-id
And then you need to write a function that identifies the status of a chat member. You can do this using getChatMember method in Telegram Bots API.
If the chat member's status is "creator" or "administrator" then the response is sent to that user.
There are 2 things you need to do.
setPrivacy for your bot - go to BotFather chat and use the /setPrivacy command which gives you the ability to set:
'Enable' - your bot will only receive messages that either start with
the '/' symbol or mention the bot by username. (Should be default)
'Disable' - your bot
will receive all messages that people send to groups. Current status
is: DISABLED.
When setting the commands for the bot, set the BotCommandScopeAllChatAdministrators scope which should limit the use of the command only to the admins of the chat.

One bot managing many discussions with one user

Is it possible to create a bot who manage more than one conversation with one user?
I need to create a bot able to make the link between a random chat and telegram.
For example, if I don't wont to use Facebook Messenger anymore, creating a bot who send me every new Facebook message from my account to my Telegram number. The bot would create a new conversation for each unique Facebook user sending me message. Or, if it's not possible, a bot who create a new temporary bot for each new user conversation and give me his #name.
Is it possible with the Telegram Bot API?
According to the latest telegram bot api you can make more than one bot, but one thing that is crucial is the bot's API token that is made manually through botFather. You can make a single bot and make other bots inherit its features and every time a new user sends you a message assign a bot to him/her. Up to here, it's possible but for API token all you can do is to make as much bots as your Facebook friends count and store their api tokens in a DB and pass one of the api tokens to the bot that stands for a user.
This is what I think can solve your problem but the api token part is a bit strange 😀 although you can send a notification from the main bot to your own account when the number of unsigned api tokens get less than 5.
As you know the number of Facebook friends can change and any of them at any time can text you so there must be enough tokens because every time one of them texts you for the first time a bot must be created with a pre-made api token and inherit the features from the main bot. From that moment that token and that bot stand for the person who tried to message you.
Also I think there must be a limit to the number of the bots that you
can make using one telegram account which can be solved using
different accounts.
What you want is possible, as you know every single telegram user has a unique chatID in telegram so if your friends or users text to your bot directly you can use a code like below to answer their messages from your own telegram account and make the bot send it to the related user:
if(update.Message.Text != null)
{
var req = new SendMessage(Your_Own_ChatID, "This message is sent from the user with chat ID: "+update.Message.Chat.Id.ToString()+"\n In order to reply it type the user's chat ID and add one comma then type in your text and tap on send.\nThe message:"+ update.Message.Text);
await bot.MakeRequestAsync(req);
continue;
}
else if (update.Message.Text.Contains(",") && update.Message.Chat.Id == Your_Own_ChatID)
{
string sender_chatID = update.Message.Text.Split(',').First();
string Message = update.Message.Text.Split(',').Last();
var req = new SendMessage(long.Parse(sender_chatID), Message);
await bot.MakeRequestAsync(req);
continue;
}
But if your users send the messages from Facebook to you and you want the bot to send them to your telegram account and answer them again through the bot using Facebook API or something else, all that must change is:
Instead of sender's Chat ID you must save his/her Facebook username and reply it with the FB username instead of telegram Chat ID.
Note that this code is just a sample and of course separating the Chat ID and the reply is a simple solution, but my recommendation is to use inline or custom keyboards to answer the message and that way you don't even need to type down the user's ChatID or FB account.
Also you can use telegram's reply feature and check if the reply is null and find the Chat ID(or FB account or ...) of the sender of the message your trying to reply and send the reply directly to that user.
That is achievable using the method that is used in this project.
[https://github.com/idoco/intergram][1]
Essentially, you create a random userid for each user. In order to reply to that specific user, you have to use the reply to message method in your telegram client. Ie... right click on the message to reply to it.

Does incoming message sent to Telegram Bot contain any id of that bot?

When I get update from telegram bot with user message written to bot I'd expect to see some id of bot with user id, however, I see such update:
Update{update_id=515450315,
message=Message{message_id=117,
from=User{id=1234567890, first_name='Name', last_name='Surname', username='null'},
date=1470510167,
chat=Chat{id=1234567890, type=Private, first_name='Name', last_name='Surname', username='null', title='null'},
...
As a documentation says User is a sender of a message (user or bot). But in this case user id is actual user id (not bot id) and chat id for some reason equals to user id. So is anybody know how to get bot id during in update object?
This is a JSON object that bot receives telegram when user send a message to bot.( As I understand from your question)
This is completely Normal. You ask why?
For two reasons:
1- When USER send something to bot, at first Telegram servers grab
it and resend it to bot app on its own server. So this JSON object
contains sender (user) id logically.(why?) It is user_id and NOT
bot_id because bot receives message and should know who sent
it.This number(user_id) tell bot about sender.
2- Why chat_id and user_id(sender) are equal? Because when user is
in private messaging with bot ,he/she sends to bot in private chat, so
these two numbers are equal but when user sends something in a group
that your bot is its member also, there are two different numbers:
chat_id that represents group_id here and user_id(sender_id)
that tells to your bot who sent the message.
We can use equality check of these two numbers to find out is user in a private chat with bot or sends in a group.
And I don' see up to know that any JSON objects send from Telegram to Bot contain any field about bot_id. Except some specific methods like getMe method.(it returns basic information about the your bot)

Resources