Можно ли как-то поставить пароль на бота в Telegram? А то получается, что им может управлять любой, кто знает его логин.
Asked
Active
Viewed 8,757 times
9
-
5Вы можете задать вопрос пользователю и если он неправильно ответит, то прекратить беседу – VenZell Jul 11 '17 at 07:52
-
@VenZell, Спасибо! Сейчас буду писать) А как Ваш комментарий сделать ответом на этот вопрос? – Fiveteen Jul 11 '17 at 07:55
-
@VenZell, Еще такой вопрос, не подскажите случайно команду которая обрывает связь с ботом? – Fiveteen Jul 11 '17 at 08:06
-
Если бы знал как именно это сделать, написал бы ответ. Что это сделать можно знаю точно. – VenZell Jul 11 '17 at 08:08
-
@VenZell, Спасибо еще раз! Буду искать. Если найду, отвечу на вопрос. – Fiveteen Jul 11 '17 at 08:11
-
Возможно подойдет https://core.telegram.org/method/messages.deleteChatUser – VenZell Jul 11 '17 at 08:11
-
@VenZell это метод не из Bot API, а из Telegram API. Немого разные вещи – Anatol Jul 14 '17 at 07:59
-
Если на ваш вопрос дан ответ, вы можете его пометить как правильный, установив зеленую галку слева от ответа под кнопками для голосования. Или написать свой ответ и отметить его как правильный. – Aug 09 '18 at 13:14
3 Answers
2
users = [123, ..., ..., n] # chat id
# Органичение доступа к боту по ID
@bot.message_handler(func=lambda message: message.chat.id not in users)
def some(message):
bot.send_message(message.chat.id, 'Извините, Создатели не разрешают мне общаться с незнакомыми пользователями)
ну и вдруг пригодится это
users_start = [123, 456, -100] # последнее - id группы если бот что-то должен делать в группе
# Органичение выполнение команды start
@bot.message_handler(func=lambda message: message.chat.id not in users_start, commands=['start'])
def some(message):
bot.send_message(message.chat.id, 'У Вас нет прав на выполнение данной команды')
kubada
- 10,225
1
Создайте массив пользователей, указавших пароль
let logged_in_users = []
При получении нового сообщения, проверяйте есть ли ID пользователя в созданном ранее массиве
if (logged_in_users.includes(message.from.id))
Если да, пусть бот обработает сообщение
Иначе, пусть бот сверит текст сообщения с паролем
if (message.text == 'password')
Если да, добавьте ID пользователя в массив и обработайте сообщение
logged_in_users.push(msg.from.id)
Если нет, отправьте сообщение о том, что требуется ввести верный пароль
ExposedCat
- 358
- 1
- 4
- 15
0
Задача решается игнорированием сообщений от пользователя с определённым chat_id. Для этого нужно хранить их все и устанавливать флаг блокировки там, где это потребуется. Хранение chat_id полезно и для многих других задач.
Пример (псевдокод):
while (true)
{
var updates = GetUpdates();
foreach update in updates
{
var chat_id = update.chat.id;
if chat_id in (%list_of_blocked_users%) then continue;
//else do something with update
...
}
}
Anatol
- 3,746
-
Так а как я могу знать chat_id пользователя заранее? Ведь лучше и проще сделать просто доступ для "своих", зная их chat_id. Забыл указать в вопросе, что пишу на Python. Но в принципе Ваша идея мне понятна. Я придумал сделать следующим образом:
- Когда боту поступает команда /start, он здоровается и говорит "Для продолжения введите пароль"
- Пароль я думаю можно присвоить какой нибудь переменной например - "passwd=12345"
- Если пароль равен passwd, перейти к следующей функции def, в ином случае сделать return(возврат к началу).
Попытки написания этого кода продолжаются...
– Fiveteen Jul 14 '17 at 07:25 -
2Кстати говоря, есть такая штука, как Deep linking. Возможно это будет самым оптимальным решением – Anatol Jul 14 '17 at 07:56
-
А "своих" chat_id откуда знаете? Вот оттуда же узнавайте и чужих. С паролем идея в принципе рабочая, но какая-то не элегантная, мягко скажем. Изобретаете велосипед. Заранее знать не нужно, нужно записывать все chat_id и помечать флагами те, которые спамят/пытаются сломать бота/используют не по назначению/ и тп, определите логику бана сами – Anatol Jul 14 '17 at 15:44
-