ch
Feedback
Python Telegram Bot

Python Telegram Bot

前往频道在 Telegram

☑️ Заявки принимаются автоматически! Обучаем созданию и продвижению чат-ботов в телеграм. ссылка: @pybotg связь: @oksi_young https://telega.in/channels/+Mj_twnrYuAxkZmUy/card/?r=BrHKEWMo

显示更多
5 003
订阅者
无数据24 小时
-67
+1730
帖子存档
Продолжение к посту выше Пропишем права пользователя. Пишем: ReadOnlyPermission = types.ChatPermissions(can_send_message=Fals
Продолжение к посту выше Пропишем права пользователя. Пишем: 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, мы обезопасим от бана администраторов

Ты знал что каждый кодер должен знать сети на хорошем уровне? Если ты хочешь по-быстрому разобраться в сетях и не хочешь чита
Ты знал что каждый кодер должен знать сети на хорошем уровне? Если ты хочешь по-быстрому разобраться в сетях и не хочешь читать книги по тысячи страниц, то переходи в канал @school_network где ты быстро сможешь изучить самое важное за несколько минут. 👉 @school_network

Методы файловых объектов. Часть 1 В примерах на фото подразумевается, что заранее создан файловый объект с именем f. Чтобы пр
Методы файловых объектов. Часть 1 В примерах на фото подразумевается, что заранее создан файловый объект с именем f. Чтобы прочитать содержимое файла, вызовите f.read(size), который считывает некоторое количество данных и возвращает его как строку (в текстовом режиме) или байты (в двоичном режиме). Если достигнут конец файла, f.read() возвращает пустую строку ('') Код 1 f.readline() считывает одну строку из файла; символ новой строки (\n) остается в конце строки и пропускается только в последней строке файла, если файл не оканчивается на символ новой строки. Это делает возвращаемое значение однозначным; если f.readline() возвращает пустую строку, то достигнут конец файла, в то время как пустая строка представлена '\n', строка, содержащая только один символ новой строки Код 2 #python_обучение

☑️ Телеграм бот, интегрированный в битрикс • Бюджет: 5000/77$ • Срок: по договоренности • Задача: Необходимо разработать бот
☑️ Телеграм бот, интегрированный в битрикс • Бюджет: 5000/77$ • Срок: по договоренности • Задача: Необходимо разработать бот для формирования выгрузок успешных сделок из Битрикс с размещением в телеграм-чате. ТЗ по ссылке Откликнуться

Продолжение к посту выше Для того, чтобы знать, кого мы замутили, пишем после async def read_only_mode(message: types.Message
Продолжение к посту выше Для того, чтобы знать, кого мы замутили, пишем после 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). С данными блоками разберемся в следующем посте

Продолжение к посту выше Продолжим писать хендлер: title = source_message.text await message.chat.set_title(title). Далее, сд
Продолжение к посту выше Продолжим писать хендлер: 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). По этой команде бот на какое то время будет ставить пользователю режим только чтения. Поэтому, в первую очередь, нужно выяснить кого мы хотим замутить

Чтение и запись файлов Функция open() возвращает файловый объект и чаще всего используется с двумя аргументами: open(filename
Чтение и запись файлов Функция open() возвращает файловый объект и чаще всего используется с двумя аргументами: open(filename, mode) Код 1 Первый аргумент — это строка, содержащая имя файла. Второй — другая строка, содержащая несколько символов, определяющих способ использования файла. Рекомендуется использовать with ключевой при работе с файловыми объектами. Преимущество заключается в том, что файл правильно закрывается после завершения работы набора, даже если в какой-то момент вызывается исключение. Использование with также намного короче, чем запись эквивалентных блоков try-finally Код 2 Если вы не используете ключевое with, то вам следует вызвать в f.close(), чтобы закрыть файл и немедленно освободить его любые системные используемые им ресурсы. После закрытия файлового объекта либо оператор with, либо путём вызова f.close() попытки использования файлового объекта автоматически завершатся неудачей. Код 3 #python_обучение

Продолжение к посту выше Так. А теперь давайте создадим фильтр IsGroup. Для него создадим файл group_chat.py и в нем напишем:
Продолжение к посту выше Так. А теперь давайте создадим фильтр 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. Данная заготовка, которую мы продолжим в следующем посте, очень похожа на хендлер для смены фото.

Как перед словом в f-строке поставить 3 пробела ввиде *?
Anonymous voting

photo content

☑️ Разработать телеграм-бота для обменника валют и криптовалют • Бюджет: ожидает предложений • Срок: по договоренности • Зада
☑️ Разработать телеграм-бота для обменника валют и криптовалют • Бюджет: ожидает предложений • Срок: по договоренности • Задача: В ответе на объявление указывайте примерный прайс, сроки и был ли у вас опыт разработки бота в данной нише (примеры) Откликнуться

Продолжение к посту выше На самом деле, из за того, что метод из прошлого поста будет дергаться каждый раз, когда боту кто то
Продолжение к посту выше На самом деле, из за того, что метод из прошлого поста будет дергаться каждый раз, когда боту кто то пишет, могут возникнуть проблемы. Есть альтернативный способ - хранить где то админов чата, выгружать их и потом проверять, находится ли пользователь в это списке. Но опять же, может быть проблема, что у нас обновился список админов, а бот не знает об этом. То есть все равно есть небольшие проблемки для этого. Хотя, мы можем проверить, будет ли наш фильтр задействоваться каждый раз или нет. То есть, если в нашем хендлере будет идти сначала фильтр команд, а потом фильтр админов, то при невыполнении первого фильтра(фильтра команд) второй не должен даже запуститься. Тем самым мы оградим бота от лишней нагрузки.

Форматирование строк в старом стиле Оператор % (по модулю) также может использоваться для форматирования строк. Учитывая 'str
Форматирование строк в старом стиле Оператор % (по модулю) также может использоваться для форматирования строк. Учитывая 'string' % values, экземпляры % в string заменяются нулем или более элементов values. Операция обычно называется интерполяцией строк. Пример на ФОТО выше #python_обучение

📌 Бесплатный курс «Первый код на Python» от SF Education! 🔹 10 уроков; 🔹 Ваша точка входа в IT сферу; 🔹 Начните свой карь
📌 Бесплатный курс «Первый код на Python» от SF Education! 🔹 10 уроков; 🔹 Ваша точка входа в IT сферу; 🔹 Начните свой карьерный путь с SF Education. SF Education входит в топ-10 онлайн-университетов по качеству образования, по версии РБК. Получите доступ к курсу на сайте

Продолжение к посту выше Теперь, для того, чтобы мы вызывали бота не только по команде /set_photo, но и по !set_photo, надо в
Продолжение к посту выше Теперь, для того, чтобы мы вызывали бота не только по команде /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(). Остановимся на втором)

Имеется объект datetime. Как с помощью f-string вывести год, месяц, день в формате год-месяц-день?
Anonymous voting

photo content

Айтишник из Питера, работавший в Google создал свой блог в телеге Он разработал простейший способ изучения языков программиро
Айтишник из Питера, работавший в Google создал свой блог в телеге Он разработал простейший способ изучения языков программирования: на C++ уйдёт 20 дней, а на Java всего 14. Слил больше 100 вакансий на которые берут без опыта и показал как построить карьеру в IT с нуля. 80.000+ человек уже заходят в айти с его помощью, попробуй и ты, это бесплатно: https://t.me/nuancesprog

Продолжение к посту выше Теперь дальше, помимо сервисных сообщений, бот может выполнять редактирование оформления чата. Поэто
Продолжение к посту выше Теперь дальше, помимо сервисных сообщений, бот может выполнять редактирование оформления чата. Поэтому для следующей группы хендлеров создаем файл 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)