Python Telegram Bot
Ir al canal en Telegram
☑️ Заявки принимаются автоматически! Обучаем созданию и продвижению чат-ботов в телеграм. ссылка: @pybotg связь: @oksi_young https://telega.in/channels/+Mj_twnrYuAxkZmUy/card/?r=BrHKEWMo
Mostrar más5 003
Suscriptores
Sin datos24 horas
-67 días
+1730 días
Archivo de publicaciones
5 003
Продолжение к посту выше
Пропишем права пользователя. Пишем:
ReadOnlyPermission = types.ChatPermissions(can_send_message=False, can_send_media_messages=False, can_send_polls=False, can_send_other_messages=False, can_add_web_page_previews=False, can_invite_users=True, can_change_info=False, can_pin_messages=False). То есть, пользователь не может отправлять сообщения, меди, какие-нибудь опросы и т.д, но может приглашать участников.
Теперь мы делаем restrict нашего пользователя: try: await bot.restrict_chat_member(chat_id, user_id=member_id, permissions=ReadOnlyPermissions, until_date=until_date) await message.replay(f"Пользователю {member.get_mention(as_html=True)} запрещено писать на {time} минут. По причине: {comment}")except BadRequest: await message.answer("Пользователь является администратором") . Вот таким образом мы будем ограничивать пользователя. Оборачивая все в try, мы обезопасим от бана администраторов5 003
Ты знал что каждый кодер должен знать сети на хорошем уровне?
Если ты хочешь по-быстрому разобраться в сетях и не хочешь читать книги по тысячи страниц, то переходи в канал @school_network где ты быстро сможешь изучить самое важное за несколько минут.
👉 @school_network
5 003
Методы файловых объектов. Часть 1
В примерах на фото подразумевается, что заранее создан файловый объект с именем
f.
Чтобы прочитать содержимое файла, вызовите f.read(size), который считывает некоторое количество данных и возвращает его как строку (в текстовом режиме) или байты (в двоичном режиме). Если достигнут конец файла, f.read() возвращает пустую строку ('')
Код 1
f.readline() считывает одну строку из файла; символ новой строки (\n) остается в конце строки и пропускается только в последней строке файла, если файл не оканчивается на символ новой строки. Это делает возвращаемое значение однозначным; если f.readline() возвращает пустую строку, то достигнут конец файла, в то время как пустая строка представлена '\n', строка, содержащая только один символ новой строки
Код 2
#python_обучение5 003
☑️ Телеграм бот, интегрированный в битрикс
• Бюджет: 5000/77$
• Срок: по договоренности
• Задача:
Необходимо разработать бот для формирования выгрузок успешных сделок из Битрикс с размещением в телеграм-чате. ТЗ по ссылке
Откликнуться
5 003
Продолжение к посту выше
Для того, чтобы знать, кого мы замутили, пишем после async def read_only_mode(message: types.Message):
member = message.replay_to_message.from_user.id chat_id = message.chat.id.
Для того, чтобы бот понимал, на сколько вводить пользователя в состояние только чтения, нам будут нужны регулярные выражения. То есть пишем: command_parse = re.compile(r"(!ro / /ro ?(\d+)? ?(a-zA-Z ]+)?"). Что за магия тут происходит? Сейчас разберемся. !ro / /ro - отлавливает саму команду, (\d+) - какое либо количество цифр, (a-zA-Z ]+) - какое то сообщения(текст-причина), знак ? ставится потому что, таких аднных может и не быть, знак + говорит о том, что может быть не одно, а несколько слов.
Далее пишем: parsed = command_parse.match(message.text) time = parsed.group(2) comment = parsed.group(3). С данными блоками разберемся в следующем посте5 003
Продолжение к посту выше
Продолжим писать хендлер:
title = source_message.text await message.chat.set_title(title).
Далее, сделаем еще один хендлер для смены описания группы. Это будет полная копия прошлого хендлера, но вместо set_title теперь будет set_description, функция будет называться set_new_description, а title сменим на description. В общем то, на этом с хендлерами все. Тестируем бота и видим, что все прекрасно работает.
Так, с этим разобрались, теперь давайте перейдем к модерации чата. Создаем файл moderate_chat.py и начинаем писать наш хендлер: @dp.message_handler(IsGroup(), Command("ro", prefixes="!/"), AdminFilter()) async def read_only_mode(message: types.Message). По этой команде бот на какое то время будет ставить пользователю режим только чтения. Поэтому, в первую очередь, нужно выяснить кого мы хотим замутить5 003
Чтение и запись файлов
Функция
open() возвращает файловый объект и чаще всего используется с двумя аргументами: open(filename, mode)
Код 1
Первый аргумент — это строка, содержащая имя файла. Второй — другая строка, содержащая несколько символов, определяющих способ использования файла. Рекомендуется использовать with ключевой при работе с файловыми объектами. Преимущество заключается в том, что файл правильно закрывается после завершения работы набора, даже если в какой-то момент вызывается исключение. Использование with также намного короче, чем запись эквивалентных блоков try-finally
Код 2
Если вы не используете ключевое with, то вам следует вызвать в f.close(), чтобы закрыть файл и немедленно освободить его любые системные используемые им ресурсы. После закрытия файлового объекта либо оператор with, либо путём вызова f.close() попытки использования файлового объекта автоматически завершатся неудачей.
Код 3
#python_обучение5 003
Продолжение к посту выше
Так. А теперь давайте создадим фильтр
IsGroup. Для него создадим файл group_chat.py и в нем напишем: class IsGroup(BoundFilter): async def check(self, message.types.Message) -> bool: return message.chat.type in (types.ChatType.GROUP, types.ChatType.SUPER_GROUP,). Возвращаемся в init.py и ставим наш фильтр на filters_factory.
Далее, переходим в функцию edit_chat.py и в нашем хендлере добавляем фильтр IsGroup до фильтра команд.
Теперь пропишем хендлер для смены названия чата. Будем писать в том же файле edit_chat.py: @dp.message_handler(IsGroup(), Command("set_title", prefixes="!/"), AdminFilter()) async def set_new_title(message: types.Message): source_message = message.reply_to_message. Данная заготовка, которую мы продолжим в следующем посте, очень похожа на хендлер для смены фото.5 003
☑️ Разработать телеграм-бота для обменника валют и криптовалют
• Бюджет: ожидает предложений
• Срок: по договоренности
• Задача:
В ответе на объявление указывайте примерный прайс, сроки и был ли у вас опыт разработки бота в данной нише (примеры)
Откликнуться
5 003
Продолжение к посту выше
На самом деле, из за того, что метод из прошлого поста будет дергаться каждый раз, когда боту кто то пишет, могут возникнуть проблемы.
Есть альтернативный способ - хранить где то админов чата, выгружать их и потом проверять, находится ли пользователь в это списке. Но опять же, может быть проблема, что у нас обновился список админов, а бот не знает об этом. То есть все равно есть небольшие проблемки для этого. Хотя, мы можем проверить, будет ли наш фильтр задействоваться каждый раз или нет.
То есть, если в нашем хендлере будет идти сначала фильтр команд, а потом фильтр админов, то при невыполнении первого фильтра(фильтра команд) второй не должен даже запуститься. Тем самым мы оградим бота от лишней нагрузки.
5 003
Форматирование строк в старом стиле
Оператор
% (по модулю) также может использоваться для форматирования строк. Учитывая 'string' % values, экземпляры % в string заменяются нулем или более элементов values. Операция обычно называется интерполяцией строк. Пример на ФОТО выше
#python_обучение5 003
📌 Бесплатный курс «Первый код на Python» от SF Education!
🔹 10 уроков;
🔹 Ваша точка входа в IT сферу;
🔹 Начните свой карьерный путь с SF Education.
SF Education входит в топ-10 онлайн-университетов по качеству образования, по версии РБК.
Получите доступ к курсу на сайте
5 003
Продолжение к посту выше
Теперь, для того, чтобы мы вызывали бота не только по команде
/set_photo, но и по !set_photo, надо в @dp.message_handler(Command("set_photo") прописать префиксы: Command("set_photo", prefixes="!/").
Таким образом мы сможем вызывать команду не только по слэш, но и по восклицательному знаку. Но, к примеру, мы хотим дать такую возможность не всем пользователям, а только администратору. Для этого нам нужно создать фильтр администратора. В фильтрах создаем файл admins.py и пишем: class AdminFilter(BoundFilter): async def check(self, message: types.Message) -> bool: (для проверки пользователя на статус админа мы можем пойти 2 способами: 1) message.chat.get_administrators(). 2) member = await message.chat.get_member(message.from_user.id) return member.is_chat_admin(). Остановимся на втором)5 003
Имеется объект datetime. Как с помощью f-string вывести год, месяц, день в формате год-месяц-день?
5 003
Айтишник из Питера, работавший в Google создал свой блог в телеге
Он разработал простейший способ изучения языков программирования: на C++ уйдёт 20 дней, а на Java всего 14.
Слил больше 100 вакансий на которые берут без опыта и показал как построить карьеру в IT с нуля.
80.000+ человек уже заходят в айти с его помощью, попробуй и ты, это бесплатно: https://t.me/nuancesprog
5 003
Продолжение к посту выше
Теперь дальше, помимо сервисных сообщений, бот может выполнять редактирование оформления чата. Поэтому для следующей группы хендлеров создаем файл
edit_chat.py и пишем уже в нем. Начнем как и раньше: @dp.message_handler(Command("set_photo")) async def set_new_photo(message: types.Message): source_message = message.replay_to_message (данная переменная дает боту видеть сообщения на которые был сделан replay)
photo = source_message.photo[-1] photo = await photo.download(destination=io.BytesIO()) (данный код дает возможность скачать последнее фото и сразу передать его в телеграм в хорошем разрешении)
input_file = types.InputFile(path_or_bytesio=photo)(эта часть нужна для самого телеграма, чтобы получить файл и вставить в наш метод set_photo) await bot.set_chat_photo(chat_id=message.chat.id, photo=input_file). Ну или это можно сделать короче: await message.chat.set_photo(photo=input_file)