Задать вопрос
Ответы пользователя по тегу Боты
  • Как отправить опрос тем кто подписан к моему боту?

    MinTnt
    @MinTnt
    Если создать, то нужно смотреть ctrl+f "poll" в документации"

    Если переслать, то Ctrl+F "forward"

    Документация
    Ответ написан
  • Как отправить рандомную фотографию из папки в проекте, Telegram bot - python?

    MinTnt
    @MinTnt
    import telebot
    from telebot import types
    import os
    import random
    
    bot = telebot.TeleBot("token")
    
    @bot.message_handler(content_types=['text'])
    def start(message):
    	if message.text.lower() == '/photo':
    		kbPhoto = telebot.types.ReplyKeyboardMarkup()
    		kbPhoto.row('Получить фото')
    		kbPhoto.row('Выйти')
    		bot.send_message(message.from_user.id, 'Нажмите на кнопку ниже, чтоб получить фотографию.', reply_markup = kbPhoto)
    	if message.text.lower() == 'получить фото':
    		photo = open('test/' + random.choice(os.listdir('test')), 'rb')
    		bot.send_photo(message.from_user.id, photo, caption = 'Лови')
    	if message.text.lower() == 'выйти':
    		bot.send_message(message.from_user.id, 'Клавиатура убрана.', reply_markup = types.ReplyKeyboardRemove())
    
    bot.polling( none_stop = True, interval=0 )

    *Но это при условии, что в той же директории файла есть папка 'test' с картинками
    Ответ написан
    7 комментариев
  • Как сделать что-бы бот телеграм из папки отправлял рандомную фотографю в чат?

    MinTnt
    @MinTnt
    import telebot
    from telebot import types
    import os
    import random
    
    bot = telebot.TeleBot("token")
    
    @bot.message_handler(content_types=['text'])
    def start(message):
    	photo = open('test/' + random.choice(os.listdir('test')), 'rb')
    	bot.send_photo(message.from_user.id, photo)

    #os.listdir - получает список всех файлов в папке "test"
    #random.choice - выбирает из списка файлов случайный файл
    #photo = open() и bot.send_photo - отправка фото

    *Но нужно учитывать, что этот пример, если в той же директории находится эта папка "test" с файлами
    **Если в этой папке будут другие файлы(не изображения) может вылезти ошибка, так что потом можно ещё добавлять проверку, чтоб в списке были лишь файлы определённого формата.
    Ответ написан
  • На чьей стороне ошибка?

    MinTnt
    @MinTnt
    Итак. Если у кого-то будет подобная ошибка:
    User authorization failed: invalid session
    То нужно будет попробовать:
    1. Проверить ключи/ выдать весь доступ
    2. Перезайти во Вконтакте
    Ответ написан
    Комментировать
  • Как проверить, подписан ли пользователь на определённый канал?

    MinTnt
    @MinTnt
    https://core.telegram.org/bots/api#getchatmember

    Вот функция для указного действия.
    getchatmember(chat_id, user_id)
    chat_id = id нужного канала/чата
    user_id = id пользователя

    Если пользователь есть в чате, то оно вернёт информацию по нему, если нету, то вроде выдаст исключение, или же просто не сможет получить данных.

    Так как краш программы (из-за исключения) нам не нужно, то весь нужный код вместе с getchatmember делаем вот так:
    try:
        #getchatmember и тд. код
    except Exception:
        bot.sendmessage #Тутя записать сообщение, об ошибке, т.е. прописать код, для случая ,если пользователь не подписан
    Ответ написан
    2 комментария
  • Команда только для выбранных пользователей discord.py?

    MinTnt
    @MinTnt
    Хз возможно ли к дискорд боте такое, но что-то по типу такого предложу:
    1) Создать список тех, кому доступна эта кмд, указав их ID, к примеру
    Admincmdaccess=['27485949', '....]
    2) В коде потом, при вводе определённой кмд, добавить строку для проверки, есть ли данный пользователь в списке, чтоб продолжить:
    if bot.user.id in Admincmdaccess:


    Если такое там можно реализовать, то сделать что-то похожее. Изменив какие-то данные
    Ответ написан
  • Как научить бота анализировать входные данные в TeleBotAPI?

    MinTnt
    @MinTnt
    import telebot
    from telebot import types
    import re #Эта библиотека, чтоб с текстом работать. Искать его и тд. Я её юзаю по принципу 'Разделяй и властвуй'
    
    bot = telebot.TeleBot("bot-token") #токен от BotFather'a
    
    @bot.message_handler(content_types=['text']) #Срабатывание на text
    def start(message): #Начало
    	if message.text.lower() == 'вычисли сумму чисел' or message.text.lower() == '/sum':#Команда для начала. message.text - получаемый текст. lower(), значит не учитывается регистр, т.е. и /SUM и /SuM будет считаться за один и тот же текст
    		bot.send_message(message.from_user.id, 'Хорошо. Введи два числа которые ты хочешь суммировать. К примеру "1 и 5".')
    		bot.register_next_step_handler(message, sumcalc)#"Перенаправляет" на след.функцию
    	else:
    		bot.send_message(message.from_user.id, 'Введи /sum, или напиши "Вычисли сумму чисел", чтобы продолжить.')
    
    def sumcalc(message):#После "перенаправления" функция сработает, лишь после получения message
    	try: #try юзаю, чтоб делать проверки каких-то действий. И в случае ошибки, программа не крашнется, а просто выполнит заданные в except действие.
    		number1, number2 = re.split(' и ', message.text, maxsplit = 1)#Разделяет полученный текст по слову " и "
    		try:
    			number1 = int(number1) #Проверка "числа ли?" полученные данные. Если без такой проверки. То при попытке сделать сумму, а там не числа - то краш
    			try:
    				number2 = int(number2)
    				bot.send_message(message.from_user.id, 'Сумма двоих введённых тобой чисел равна - ' + str(number1 + number2))
    			except Exception:
    				bot.send_message(message.from_user.id, 'Вы ввели данные не в правильном формате.\nВы ввели не число. /sum - Чтоб повторить сначала.')
    		except Exception:
    			bot.send_message(message.from_user.id, 'Вы ввели данные не в правильном формате.\nВы ввели не число. /sum - Чтоб повторить сначала.')
    	except Exception:
    		bot.send_message(message.from_user.id, 'Вы ввели данные не в правильном формате.\n*Будьте внимательны*, ввод должен быть формата *"*число *и* число*"*. /sum - Чтоб повторить сначала.', parse_mode= 'Markdown')
    
    bot.polling( none_stop = True, interval=0 )#Чтоб программа не закрывалась никогда
    Ответ написан
    2 комментария