В этом посте в процессе написания миддлвари для отслеживания времени работы в профиле Telegram, я не нашёл способ получить время при помощи бота, поэтому обращался за этой информацией к серверам Telegram. На Github репозитория AIOgram я задавал по этому поводу вопрос и получил ответ - я неправильно пытался получить информацию. Что ж, бывает, давайте это исправим.
У нас был следующий код в файле
Уберём всё, что было до блока
Можно было получить информацию о чате администратора просто обратившись к боту. Спасибо за эту информацию пользователю Olegt0rr с Github.
Для Boosty.
Также, для подписчиков на Boosty обновил репозиторий с проектом. Добавил поддержку контекста для бесед (ведение истории диалогов) в Redis.
AIOgram3 18. Подключаем оплату Telegram Stars
Ответы на вопросы.
Прочитать подробнее можно в "Условиях обслуживания": https://telegram.org/tos/bot-developers#6-payments
- Для кого это всё? - Звёзды ввели для продажи цифровых товаров и услуг. Они не распространяются на продажу физических товаров. Если вы продаёте что-то электронное или не существующее физически, например, доступ к закрытому чату, курс и т.д., подключать звёзды
обязательно. Telegram будет следить и проверять транзакции в ботах, они уже сообщали, что заблокировали некоторое количество ботов которые всё ещё не перешли на звёзды.
Пункт 6.2. Digital Goods and Services.
- Куда уходят звёзды после оплаты? - это сейчас главная загадка. Возможность получать за звёзды вознаграждения (именно так назвали вывод) или тратить их на рекламу появится в Июле 2024г. Вероятно, будет внедрено в платформу Fragment. Более подробной информации на данный момент нет. Также учтите, что звёзды на балансе будут появляться с задержкой до 21-го дня.
Пункты 6.2.4. Rewards for Stars и 6.2.4.1. Receiving Rewards.
- Сколько я получу за звёзды? - За каждую полученную звезду вы получите эквивалент
Грубо говоря, за 100 звёзд купленных пользователем по цене в 189 рублей, на выходе получим примерно ~110 рублей, это ещё не считая комиссии за вывод/обмен TON.
Пункт 6.2.4. Rewards for Stars.
Рефактор кода.
Провёл небольшие изменения в коде бота. Обновил файл поста с материалами.
Заключение.
Думал, изменений будет больше. Хотелось бы получать больше обратной связи по постам и коду в них.
Пост на сайте
Поддержать проект на Boosty
Поддержать проект в Telegram
#Python #код_на_салфетке #рефакторинг #aiogram #гайды #telegram #telegram_stars #криптовалюта #TON #звёзды_Telegram #middleware #изменения
У нас был следующий код в файле
business_middleware.py:async with httpx.AsyncClient() as client:
resp = await client.get(
f"https://api.telegram.org/bot{secrets.token}/getChat?chat_id={secrets.admin_id}"
)
chat = resp.json()
full_chat = ChatFullInfo(**chat["result"])
if check_opening_hours(full_chat.business_opening_hours):
Уберём всё, что было до блока
if и заменим на две строчки:from app.settings import secrets, bot
chat = await bot.get_chat(secrets.admin_id)
hours = chat.business_opening_hours
if check_opening_hours(hours):
Можно было получить информацию о чате администратора просто обратившись к боту. Спасибо за эту информацию пользователю Olegt0rr с Github.
Для Boosty.
Также, для подписчиков на Boosty обновил репозиторий с проектом. Добавил поддержку контекста для бесед (ведение истории диалогов) в Redis.
AIOgram3 18. Подключаем оплату Telegram Stars
Ответы на вопросы.
Прочитать подробнее можно в "Условиях обслуживания": https://telegram.org/tos/bot-developers#6-payments
- Для кого это всё? - Звёзды ввели для продажи цифровых товаров и услуг. Они не распространяются на продажу физических товаров. Если вы продаёте что-то электронное или не существующее физически, например, доступ к закрытому чату, курс и т.д., подключать звёзды
обязательно. Telegram будет следить и проверять транзакции в ботах, они уже сообщали, что заблокировали некоторое количество ботов которые всё ещё не перешли на звёзды.
Пункт 6.2. Digital Goods and Services.
- Куда уходят звёзды после оплаты? - это сейчас главная загадка. Возможность получать за звёзды вознаграждения (именно так назвали вывод) или тратить их на рекламу появится в Июле 2024г. Вероятно, будет внедрено в платформу Fragment. Более подробной информации на данный момент нет. Также учтите, что звёзды на балансе будут появляться с задержкой до 21-го дня.
Пункты 6.2.4. Rewards for Stars и 6.2.4.1. Receiving Rewards.
- Сколько я получу за звёзды? - За каждую полученную звезду вы получите эквивалент
0.013 USD, вероятно в криптовалюте TON. Также была предоставлена таблица с разъяснением ценообразования: https://core.telegram.org/file/400780400418/1/NMQCu-wgDpo.397006/5304141797eccc38c4Грубо говоря, за 100 звёзд купленных пользователем по цене в 189 рублей, на выходе получим примерно ~110 рублей, это ещё не считая комиссии за вывод/обмен TON.
Пункт 6.2.4. Rewards for Stars.
Рефактор кода.
Провёл небольшие изменения в коде бота. Обновил файл поста с материалами.
Заключение.
Думал, изменений будет больше. Хотелось бы получать больше обратной связи по постам и коду в них.
Пост на сайте
Поддержать проект на Boosty
Поддержать проект в Telegram
#Python #код_на_салфетке #рефакторинг #aiogram #гайды #telegram #telegram_stars #криптовалюта #TON #звёзды_Telegram #middleware #изменения
🔥7
ООП на Python, ч. 3. Методы __str__ и __repr__.
Автор: Андрей Лебедев
Продолжаем цикл постов об ООП на Python. В прошлый раз мы говорили о статических и классовых методах. Сегодня разберем методы
Автор: Андрей Лебедев
Продолжаем цикл постов об ООП на Python. В прошлый раз мы говорили о статических и классовых методах. Сегодня разберем методы
__str__ и __repr__.👍3🔥2
В рамках первого поста об ООП на Python мы уже рассматривали метод
Метод __str__().
Наверняка вам доводилось создать объект какого-нибудь класса и сразу же этот объект распечатать методом
Используем класс футбольного клуба из предыдущего поста:
Вместо того, чтобы вызвать метод
Если явным образом не оповестить Python о том, как должно выглядеть представление объекта в виде строки, будет распечатано сообщение, содержащее следующую информацию:
• Имя запускаемого файла
• Имя класса, который использовался для создания объекта
• Ячейка памяти, в которой хранится объект.
Эта информация бывает полезна в процессе отладки кода, когда нужна заниматься поиском и устранением багов, но простому пользователю она мало о чем говорит. И выглядит, откровенно говоря, не очень читабельно для неподготовленного человека. Метод
Переопределим метод
И результат выполнение кода теперь выглядит куда дружелюбнее:
Метод
Рассмотрим пример из официального туториала по созданию приложений на Django. В нём разбирается пример класса модели
__init__. Все три эти метода (__str__, __repr__ и __init__), как нетрудно заметить, объединяют по два нижних подчеркивания до и после собственно названия метода. Такой синтаксис обозначает так называемые магические (или dunder - от английского “double under(scores)” - “двойное нижнее подчёркивание”) методы. Они используются для определения специального поведения объектов и вызываются во время использования стандартных операций (сложение, вычитание, доступ к атрибутам и др.).Метод __str__().
Наверняка вам доводилось создать объект какого-нибудь класса и сразу же этот объект распечатать методом
print(). Чаще всего результат выглядел немного загадочно. Давайте создадим свой собственный класс и попробуем распечатать его объект.Используем класс футбольного клуба из предыдущего поста:
class FootballClub:
def __init__(self, name, description=""):
self.name = name
self.description = description
def describe_club(self):
msg = f"{self.name}: {self.description}"
print(msg)
club = FootballClub(“Манчестер Юнайтед”, “Манчестер, Англия”)
print(club)
Вместо того, чтобы вызвать метод
describe_club(), мы просто распечатаем вновь созданный объект нашего класса. Результат получается примерно таким:<__main__.FootballClub object at 0x1050effd0>
Если явным образом не оповестить Python о том, как должно выглядеть представление объекта в виде строки, будет распечатано сообщение, содержащее следующую информацию:
• Имя запускаемого файла
• Имя класса, который использовался для создания объекта
• Ячейка памяти, в которой хранится объект.
Эта информация бывает полезна в процессе отладки кода, когда нужна заниматься поиском и устранением багов, но простому пользователю она мало о чем говорит. И выглядит, откровенно говоря, не очень читабельно для неподготовленного человека. Метод
__str__() позволяет переопределить, что должно выводиться на печать, когда по отношению к объекту класса используется метод print().Переопределим метод
__str__() для нашего класса:
class FootballClub:
def __init__(self, name, description=""):
self.name = name
self.description = description
def describe_club(self):
msg = f"{self.name}: {self.description}"
print(msg)
def __str__(self):
return self.name
club = FootballClub("Манчестер Юнайтед", "Манчестер, Англия")
print(club)
И результат выполнение кода теперь выглядит куда дружелюбнее:
Манчестер Юнайтед
Метод
__str__() используется не только для вывода строк на печать в терминале. Многие панели управления “ищут” именно __str__() для отображения данных, связанных с экземплярами того или иного класса. Так, к примеру, происходит в админ панели Django, поэтому в большинстве случаев метод __str__() определен в классах моделей.Рассмотрим пример из официального туториала по созданию приложений на Django. В нём разбирается пример класса модели
Question - вопроса в рамках приложения для проведения анкетирования. Код модели выглядит следующим образом:
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date_published')
def __str__(self):
return self.question_text
🔥4
Так как метод
Таким образом, на печать выводится название класса, слово
Метод __repr__().
Прежде чем пускаться в объяснения работы метода
Сначала мы импортируем класс
На печать выводится название модуля, название класса, слово
Если вы хотите, чтобы в этот момент в терминале (или ином служебном окружении) выводилась другая информация, необходимо переопределить метод
“Если это возможно, вывод должен быть в виде выражения Python, которое можно использовать для воссоздания объекта с тем же значением (при условии наличия подходящего окружения). Если это невозможно, вывод должен быть в виде строки с текстом в таком формате <…полезная информация…>. Возвращаемое значение должно быть строкой Python.
Вывод метода обычно используется для дебаггинга, поэтому важно, чтобы он был информативным и недвусмысленным”.
Альтернативный вывод метода
Чтобы этот код сработал, надо заново открыть окно терминала и повторить весь порядок ввода:
На этот раз выводится не стандартная запись, а вывод нашего перезаписанного метода
__str__() переопределен, в админ панели будет выводиться непосредственно сам вопрос. Если бы метод не переопределялся, то там бы виднелось что-то вроде Question object (1). Дело в том, что в Django все модели наследуются от базового класса модели в модуле django.db.models, где метод __str__() определяется следующим образом:
def __str__(self):
return "%s object (%s)" % (self.__class__.__name__, self.pk)
Таким образом, на печать выводится название класса, слово
object и первичный ключ объекта в скобках.Метод __repr__().
Прежде чем пускаться в объяснения работы метода
__repr__(), разберёмся с тем, что же он делает. Для этого откроем терминал и зайдём в папку, где лежит наш файл с классом футбольного клуба, который мы создали ранее. Таким образом мы сможем получить доступ к классам и функциям нашего файла прямо из терминала:
$ ls
football.py
$ python
>>> from football import FootballClub
>>> club = FootballClub("Манчестер Юнайтед")
>>> print(club)
Манчестер Юнайтед
>>>
Сначала мы импортируем класс
FootballClub. Затем создаем объект этого класса, передав в него название клуба ("Манчестер Юнайтед”), и записываем его в переменную club. Далее выводим на печать содержимое этой самой переменной. Срабатывает метод __str__(), который мы создали, и мы видим название клуба. А что случится, если мы в терминале просто введем имя переменной, не передавая его предварительно в метод print()?
>>> club
<football.FootballClub object at 0x10bdc8040>
На печать выводится название модуля, название класса, слово
object и адрес ячейки, в которую он записан.Если вы хотите, чтобы в этот момент в терминале (или ином служебном окружении) выводилась другая информация, необходимо переопределить метод
__repr__(). Но прежде чем бросаться это делать, прочитаем официальную документацию к этому методу:“Если это возможно, вывод должен быть в виде выражения Python, которое можно использовать для воссоздания объекта с тем же значением (при условии наличия подходящего окружения). Если это невозможно, вывод должен быть в виде строки с текстом в таком формате <…полезная информация…>. Возвращаемое значение должно быть строкой Python.
Вывод метода обычно используется для дебаггинга, поэтому важно, чтобы он был информативным и недвусмысленным”.
Альтернативный вывод метода
__repr__() должен помочь заново создать эквивалентный объект данного класса. Давайте добавим метод __repr__() в класс FootballClub:
class FootballClub:
def __init__(self, name, description=""):
self.name = name
self.description = description
def describe_club(self):
msg = f"{self.name}: {self.description}"
print(msg)
def __str__(self):
return self.name
def __repr__(self):
if self.description:
return (f"FootballClub(name={self.name}, "
f"description={self.description})")
else:
return f"FootballClub(name={self.name})"
Чтобы этот код сработал, надо заново открыть окно терминала и повторить весь порядок ввода:
$ python
>>> from football import FootballClub
>>> club = FootballClub("Манчестер Юнайтед")
>>> club
FootballClub("Манчестер Юнайтед")
На этот раз выводится не стандартная запись, а вывод нашего перезаписанного метода
__repr__(): строка, позволяющая создать объект, полностью эквивалентный тому, в котором и был вызван метод __repr__().🔥4
В нашем примере срабатывал кусок кода, записанный в
Python вызывает метод
В следующий раз поговорим о методе
Пост на сайте
Поддержать проект на Boosty
Поддержать проект в Telegram
#Python #ООП #код_на_салфетке #код_в_мешке #класс #init #метод #магический_метод #repr #dunder #str #dunder_метод
else. Если мы добавим в наш объект описание (description), вывод будет уже другим:
$ python
>>> from football import FootballClub
>>> club = club = FootballClub("Манчестер Юнайтед", "Английский футбольный клуб")
>>> club
FootballClub(name=Манчестер Юнайтед, description=Английский футбольный клуб)
Python вызывает метод
__repr__(), когда генерирует вывод для дебаггинга. В момент дебаггинга кусок кода, который позволит сгенерировать объект, задействованный в проблемном коде.В следующий раз поговорим о методе
__new__().Пост на сайте
Поддержать проект на Boosty
Поддержать проект в Telegram
#Python #ООП #код_на_салфетке #код_в_мешке #класс #init #метод #магический_метод #repr #dunder #str #dunder_метод
🔥6
Подготовили новый Shorts посвящённый Telegram Stars и ответам на вопросы.
https://youtube.com/shorts/pXC8LZKWNlU
Будем благодарны за лайк и комментарий!
https://youtube.com/shorts/pXC8LZKWNlU
Будем благодарны за лайк и комментарий!
🔥8
Приветствуем.
В прошлую пятницу мы опубликовали пост, в котором попросили вас задавать нам вопросы.
Был всего один вопрос в комментариях к посту.
Давайте на него ответим.
Помощь с Django.
Ссылка на комментарий
Вариантов итогового проекта по Django из GeekBrains у нас нет, т.к. когда мы учились, его ещё не было. Но, Александр из комментариев сам предложил вариант репозитория для "обзора".
Проект выглядит очень комплексным. Видно, что человек сам хорошо разбирается в Django, т.к. таких знаний в GB не дают. В целом, проект может служить отличным подспорьем в качестве "референса" (копировать плохо, подглядывать полезно 😉).
Однако, есть вопросы к реализации некоторых моментов:
- В моделях используется кастомный транслитератор, а потом на основе его происходит слагификация для URL, записанного в поле CharField, а не SlugField, т.е. без валидации. Странное решение, поскольку есть библиотека
- В проекте используется доступ к API Kandinsy от СБЕР. Файл с ключами выполнен в виде
- Представления. В некоторых представлениях происходит много логики, которую по хорошему вынести в отдельные функции. В таком виде они становятся перегруженными. Также, в некоторых представлениях используется множественный вызов методов разделённый переносом строки через символ
На самом деле, разбирать чужой код, без запуска и конкретной цели не самое "удобное" занятие. Код выглядит хорошо и на высоком уровне. К API-приложению вообще не прикопаться. По большому счёту, описанное выше тянет на "вкусовщину" и добавить больше нечего.
В прошлую пятницу мы опубликовали пост, в котором попросили вас задавать нам вопросы.
Был всего один вопрос в комментариях к посту.
Давайте на него ответим.
Помощь с Django.
Ссылка на комментарий
Вариантов итогового проекта по Django из GeekBrains у нас нет, т.к. когда мы учились, его ещё не было. Но, Александр из комментариев сам предложил вариант репозитория для "обзора".
Проект выглядит очень комплексным. Видно, что человек сам хорошо разбирается в Django, т.к. таких знаний в GB не дают. В целом, проект может служить отличным подспорьем в качестве "референса" (копировать плохо, подглядывать полезно 😉).
Однако, есть вопросы к реализации некоторых моментов:
- В моделях используется кастомный транслитератор, а потом на основе его происходит слагификация для URL, записанного в поле CharField, а не SlugField, т.е. без валидации. Странное решение, поскольку есть библиотека
pytils с функцией slugify, работающая с кириллицей. При её использовании можно сразу сохранять Slug-поле без необходимости в лишних полях и действиях.- В проекте используется доступ к API Kandinsy от СБЕР. Файл с ключами выполнен в виде
.py-файла и доступен в открытом виде. Как по мне, это плохое решение. Такие данные должны находиться в .env и браться из основного settings.py. - Представления. В некоторых представлениях происходит много логики, которую по хорошему вынести в отдельные функции. В таком виде они становятся перегруженными. Также, в некоторых представлениях используется множественный вызов методов разделённый переносом строки через символ
\, это не хорошая практика. Лучшим решением, обернуть всё выражение в скобки () и тогда внутри не будет проблем с переносом строк. Код станет визуально понятнее.На самом деле, разбирать чужой код, без запуска и конкретной цели не самое "удобное" занятие. Код выглядит хорошо и на высоком уровне. К API-приложению вообще не прикопаться. По большому счёту, описанное выше тянет на "вкусовщину" и добавить больше нечего.
🔥8
Всех с вечером пятницы!
Наступила пятница, и это значит, что настало время расслабиться и отдохнуть после усердной недели. Надеюсь, ваша неделя была продуктивной, и вы достигли всех своих целей. Пусть вечер пятницы будет полон приятных моментов, а выходные принесут вам заслуженный отдых.
Фильм: Цветы войны
Год: 2011
1937 год, Японо-китайская война. Американский гробовщик Джон направляется в Католическую церковь в Нанкине, чтобы подготовить священника к похоронам. По прибытии он оказывается в эпицентре военных действий и единственным мужчиной среди учениц монастыря и проституток из соседнего борделя. Джон решает выдать себя за священника и попытаться спасти обе группы от японской армии.
https://www.sspoisk.ru/film/464561/
Приятного просмотра!
Наступила пятница, и это значит, что настало время расслабиться и отдохнуть после усердной недели. Надеюсь, ваша неделя была продуктивной, и вы достигли всех своих целей. Пусть вечер пятницы будет полон приятных моментов, а выходные принесут вам заслуженный отдых.
Фильм: Цветы войны
Год: 2011
1937 год, Японо-китайская война. Американский гробовщик Джон направляется в Католическую церковь в Нанкине, чтобы подготовить священника к похоронам. По прибытии он оказывается в эпицентре военных действий и единственным мужчиной среди учениц монастыря и проституток из соседнего борделя. Джон решает выдать себя за священника и попытаться спасти обе группы от японской армии.
https://www.sspoisk.ru/film/464561/
Приятного просмотра!
🔥3👍1
Что выведет код с изображения? №28
Anonymous Quiz
12%
TypeError
44%
14
8%
ValueError
29%
2 2 2 2 2 2 2
8%
Нет верного ответа
🔥6
Анонс конкурса для начинающих программистов от Telegram-канала "Код на салфетке"
Приветствуем!
Мы объявляем о конкурсе по программированию на Python для начинающих программистов!
Посмотреть анонс конкурса можно на нашем YouTube-канале!
Вся информация о задаче, условиях проведения и призе будет завтра.
Рассказывайте друзьям! Вместе будет интереснее! Также вступайте в наш чат для обсуждения!
P.S. Как оказалось, YouTube в Shorts любит не только лайки, но и время просмотра видео. Будем благодарны, если вы посмотрите видео до конца и поставите лайк. Так мы сможем получить больший охват. Спасибо!
Пост на сайте
Поддержать проект на Boosty
Поддержать проект в Telegram
#проект #код_на_салфетке #python #shorts #соревнование #programming #github #обучение #программирование #портфолио #конкурс
Приветствуем!
Мы объявляем о конкурсе по программированию на Python для начинающих программистов!
Посмотреть анонс конкурса можно на нашем YouTube-канале!
Вся информация о задаче, условиях проведения и призе будет завтра.
Рассказывайте друзьям! Вместе будет интереснее! Также вступайте в наш чат для обсуждения!
P.S. Как оказалось, YouTube в Shorts любит не только лайки, но и время просмотра видео. Будем благодарны, если вы посмотрите видео до конца и поставите лайк. Так мы сможем получить больший охват. Спасибо!
Пост на сайте
Поддержать проект на Boosty
Поддержать проект в Telegram
#проект #код_на_салфетке #python #shorts #соревнование #programming #github #обучение #программирование #портфолио #конкурс
🔥4👍1🤩1
Вчерашняя задача была короткой и даже простой, если вы внимательно читали наши прошлые разборы, но справилось с ней всего 34% - 13 человек из 38-ми.
Код задачи:
Разбор задачи
Сперва пройдёмся по строкам.
Объявляем переменную
Затем мы выводим результат выражения
Давайте разберём это выражение по частям:
1. Умножение списка на число:
- Когда мы умножаем список на число
- В нашем случае
2. Распаковка списка с оператором `*`:
- Оператор
- Поэтому
В итоге функция
Что могло пойти не так?
Задача проверяет ваше знание двух важных аспектов Python: умножение списков и распаковка списков с помощью оператора
Итак, правильный ответ:
Код задачи:
b = [2]
print(*b * 7)
Разбор задачи
Сперва пройдёмся по строкам.
Объявляем переменную
b и присваиваем ей список, содержащий одно число 2.Затем мы выводим результат выражения
print(*b * 7).Давайте разберём это выражение по частям:
1. Умножение списка на число:
- Когда мы умножаем список на число
7, мы получаем новый список, в котором элементы исходного списка повторяются 7 раз.- В нашем случае
b * 7 создаст список [2, 2, 2, 2, 2, 2, 2].2. Распаковка списка с оператором `*`:
- Оператор
* перед списком распаковывает его, превращая каждый элемент в отдельный аргумент для функции print().- Поэтому
print(*(b * 7)) эквивалентно print(2, 2, 2, 2, 2, 2, 2).В итоге функция
print() выведет элементы списка через пробел.Что могло пойти не так?
Задача проверяет ваше знание двух важных аспектов Python: умножение списков и распаковка списков с помощью оператора
*. Ошибки могли бы возникнуть, если вы неверно понимаете, как работает распаковка или умножение списков.Итак, правильный ответ:
2 2 2 2 2 2 2.🔥3
Подготовили видео версию разбора задачи в YouTube Shorts!
https://youtube.com/shorts/ph3ALmRfgHo?feature=share
Будем благодарны, если вы посмотрите видео до конца и поставите лайк. Так мы сможем получить больший охват. Спасибо!
https://youtube.com/shorts/ph3ALmRfgHo?feature=share
Будем благодарны, если вы посмотрите видео до конца и поставите лайк. Так мы сможем получить больший охват. Спасибо!
🔥2👍1
Конкурс для начинающих программистов от Telegram-канала "Код на салфетке"
Автор: Иван Ашихмин
Приветствуем.
У нас на канале много тех, кто в данный момент учится или закончил обучение, но всё ещё не нашёл работу, а также тех, кто хочет применить свои знания, но не предоставляется возможности.
Подписчик канала и чата Сергей предложил идею провести конкурс по программированию среди подписчиков и мы согласились.
Код на салфетке объявляет конкурс по программированию для начинающих разработчиков!
Какая цель?
Цель — дать возможность проявить себя, показать свои навыки или изучить новое для решение задачи. Погрузиться в обсуждение и поиски способа решения. Посоревноваться с другими программистами за первое место. Заполучить в GitHub, пусть и небольшую, но работу над реальным проектом.
Автор: Иван Ашихмин
Приветствуем.
У нас на канале много тех, кто в данный момент учится или закончил обучение, но всё ещё не нашёл работу, а также тех, кто хочет применить свои знания, но не предоставляется возможности.
Подписчик канала и чата Сергей предложил идею провести конкурс по программированию среди подписчиков и мы согласились.
Код на салфетке объявляет конкурс по программированию для начинающих разработчиков!
Какая цель?
Цель — дать возможность проявить себя, показать свои навыки или изучить новое для решение задачи. Погрузиться в обсуждение и поиски способа решения. Посоревноваться с другими программистами за первое место. Заполучить в GitHub, пусть и небольшую, но работу над реальным проектом.
🔥6👍1
Задача:
У нас есть "Бот на салфетке" - бот для канала и чата. В связи с большим количеством спамеров, приходящих в чат и спамящих своим "очень интересным предложением", возникла необходимость в защите - введением проверки новых пользователей чата через "капчу", при правильном ответе на которую пользователь может продолжить общаться, в противном случае бот исключает его из чата.
Способов решения задачи несколько, от чего она является идеальной для конкурса.
Необходимо:
- Реализовать "капчу" для нового участника чата.
- "Капча" должна быть в виде изображения.
- Для упрощения, достаточно реализовать задачу на сложение, результат которой будет проверять бот.
- Дать пользователю три попытки на решение задачи.
- Если пользователь три раза вводит неверный ответ - исключение из чата.
- Все сообщения пользователя без верного ответа - удалять.
- (Опционально) Добавить таймер в течении которого пользователь должен ответить (включая неверные ответы), если не было верного ответа или не было сообщений вовсе - исключение.
Процесс проведения:
На выполнение задания даётся ровно неделя.
На следующей неделе мы объявим список участников со ссылками на их ветки и запустим голосование.
По результатам голосования будет выбран победитель.
Как участвовать?
На GitHub создан репозиторий с исходным кодом бота: https://github.com/proDreams/napkin_contest
- Необходимо сделать fork (именно fork, а не clone!) проекта.
- Написать функционал антиспама в отдельной ветке.
- Убедиться, что всё работает.
- Прописать в
- Сделать push в свой репозиторий и из него pull request в наш.
- Ждать начала голосования и участвовать в обсуждении своего и решений других участников.
Приз:
Участник набравший больше всех голосов получит небольшой, но приятный приз - 2000 рублей!
1000 рублей идёт от нашей редакции и ещё 1000 от нашего спонсора Сергея!
Правила:
- При количестве участников меньше 3-х конкурс считается недействительным.
- При обсуждении работ других участников будьте вежливы и учтивы. Любая токсичность или принижение будет караться удалением сообщений. Приветствуется конструктивная критика и предложение способов решения.
Пост на сайте
Поддержать проект на Boosty
Поддержать проект в Telegram
#проект #код_на_салфетке #aiogram #telegram #python #telegram_бот #соревнование #programming #github #обучение #программирование #портфолио #конкурс
У нас есть "Бот на салфетке" - бот для канала и чата. В связи с большим количеством спамеров, приходящих в чат и спамящих своим "очень интересным предложением", возникла необходимость в защите - введением проверки новых пользователей чата через "капчу", при правильном ответе на которую пользователь может продолжить общаться, в противном случае бот исключает его из чата.
Способов решения задачи несколько, от чего она является идеальной для конкурса.
Необходимо:
- Реализовать "капчу" для нового участника чата.
- "Капча" должна быть в виде изображения.
- Для упрощения, достаточно реализовать задачу на сложение, результат которой будет проверять бот.
- Дать пользователю три попытки на решение задачи.
- Если пользователь три раза вводит неверный ответ - исключение из чата.
- Все сообщения пользователя без верного ответа - удалять.
- (Опционально) Добавить таймер в течении которого пользователь должен ответить (включая неверные ответы), если не было верного ответа или не было сообщений вовсе - исключение.
Процесс проведения:
На выполнение задания даётся ровно неделя.
На следующей неделе мы объявим список участников со ссылками на их ветки и запустим голосование.
По результатам голосования будет выбран победитель.
Как участвовать?
На GitHub создан репозиторий с исходным кодом бота: https://github.com/proDreams/napkin_contest
- Необходимо сделать fork (именно fork, а не clone!) проекта.
- Написать функционал антиспама в отдельной ветке.
- Убедиться, что всё работает.
- Прописать в
README.md описание проделанной работы.- Сделать push в свой репозиторий и из него pull request в наш.
- Ждать начала голосования и участвовать в обсуждении своего и решений других участников.
Приз:
Участник набравший больше всех голосов получит небольшой, но приятный приз - 2000 рублей!
1000 рублей идёт от нашей редакции и ещё 1000 от нашего спонсора Сергея!
Правила:
- При количестве участников меньше 3-х конкурс считается недействительным.
- При обсуждении работ других участников будьте вежливы и учтивы. Любая токсичность или принижение будет караться удалением сообщений. Приветствуется конструктивная критика и предложение способов решения.
Пост на сайте
Поддержать проект на Boosty
Поддержать проект в Telegram
#проект #код_на_салфетке #aiogram #telegram #python #telegram_бот #соревнование #programming #github #обучение #программирование #портфолио #конкурс
🔥9
Что бы вы хотели создать или уже создаёте в качестве PET-проекта?
Anonymous Poll
20%
Сайт
16%
Мобильное приложение
0%
Игру
36%
Telegram-бота
8%
Обучить собственную нейросеть
8%
Приложение с GUI
12%
Другое (напишите в комментариях)
🔥5
Приветствуем!
Утром мы объявили о конкурсе и уже появились первые участники!
Представляю участников на текущий момент:
- Александр Бабичев
- Виктор Вангели
- Худайберген
Ηe_ΙΙροcΤο_Tακ
Сдали pull request:
Виктор Королев
Расскажите друзьям, знакомым, соседям из вашего ЖЭКа о конкурсе! Чем больше участников - тем интереснее будет смотреть на варианты реализации и читать обсуждения.
Утром мы объявили о конкурсе и уже появились первые участники!
Представляю участников на текущий момент:
- Александр Бабичев
- Виктор Вангели
- Худайберген
Ηe_ΙΙροcΤο_Tακ
Сдали pull request:
Виктор Королев
Расскажите друзьям, знакомым, соседям из вашего ЖЭКа о конкурсе! Чем больше участников - тем интереснее будет смотреть на варианты реализации и читать обсуждения.
Telegram
Код на салфетке
Конкурс для начинающих программистов от Telegram-канала "Код на салфетке"
Автор: Иван Ашихмин
Приветствуем.
У нас на канале много тех, кто в данный момент учится или закончил обучение, но всё ещё не нашёл работу, а также тех, кто хочет применить свои знания…
Автор: Иван Ашихмин
Приветствуем.
У нас на канале много тех, кто в данный момент учится или закончил обучение, но всё ещё не нашёл работу, а также тех, кто хочет применить свои знания…
🔥4🤩1
Приветствуем.
К объявленному вчера конкурсу в чате и в личку поступил ряд вопросов. Дабы не повторяться отвечу сразу для всех:
1. Что нужно для запуска бота? — Нужен ключ бота полученный у BotFather, ID администратора бота и ID группы в которой будете тестировать. Получить ID можно у бота: https://t.iss.one/getmyid_bot
2. Нужно ли использовать ИИ? — Использовать можно всё, что угодно. Вы вольны выбирать понравившуюся вам реализацию, однако, для использования ИИ нужны ключи доступа к API и если кто-то другой захочет протестировать, это может вызвать лишние неудобства.
3. У меня ошибка в файле
4. У меня ошибка Telegram
5. Там есть Dockerfile, для запуска нужен докер? — Нет, это файл от одного из постов. Инструкция по запуску описана в README.md.
6. У меня ошибка Pydantic — Даже если некоторые переменные окружения не нужны для конкурса, они все равно нужны в коде. Просто добавьте их с любым значением, а ещё лучше переменуйте .env.example в .env и проблем не будет.
Вроде всё, если что-то забыли или есть другие вопросы - пишите!
К объявленному вчера конкурсу в чате и в личку поступил ряд вопросов. Дабы не повторяться отвечу сразу для всех:
1. Что нужно для запуска бота? — Нужен ключ бота полученный у BotFather, ID администратора бота и ID группы в которой будете тестировать. Получить ID можно у бота: https://t.iss.one/getmyid_bot
2. Нужно ли использовать ИИ? — Использовать можно всё, что угодно. Вы вольны выбирать понравившуюся вам реализацию, однако, для использования ИИ нужны ключи доступа к API и если кто-то другой захочет протестировать, это может вызвать лишние неудобства.
3. У меня ошибка в файле
transcribe_voice.py — Ошибка связана с тем, что у меня Python 3.12 и в f-строке используются одинаковые кавычки. Просто измените внутренние на одинарные. Обновлять репозиторий не буду, т.к. участники уже сделали форки и ради двух кавычек им придётся стягивать изменения. 4. У меня ошибка Telegram
chat not found — Необходимо добавить вашего бота в вашу группу и дать ему права администратора.5. Там есть Dockerfile, для запуска нужен докер? — Нет, это файл от одного из постов. Инструкция по запуску описана в README.md.
6. У меня ошибка Pydantic — Даже если некоторые переменные окружения не нужны для конкурса, они все равно нужны в коде. Просто добавьте их с любым значением, а ещё лучше переменуйте .env.example в .env и проблем не будет.
Вроде всё, если что-то забыли или есть другие вопросы - пишите!
🔥3🤯2
У нас много интересных субботних задач "что выведет этот код" и мы решили вышедшие ранее тоже превратить в видео.
Ссылка на задачу, если вы пропустили: https://t.iss.one/press_any_button/425
Видео версия "Что выведет этот код? №3":
https://youtube.com/shorts/zgmoAAIkXgk
Будем благодарны лайку и досмотру видео до конца, спасибо!
Ссылка на задачу, если вы пропустили: https://t.iss.one/press_any_button/425
Видео версия "Что выведет этот код? №3":
https://youtube.com/shorts/zgmoAAIkXgk
Будем благодарны лайку и досмотру видео до конца, спасибо!
🔥4
Telegram ввёл обязательное наличие политики конфиденциальности в ботах
Автор: Иван Ашихмин
Telegram объявил о введении новых правил для ботов и мини-приложений, которые вступают в силу немедленно. Эти изменения направлены на усиление защиты данных пользователей и соблюдение международных стандартов конфиденциальности.
Коротко:
Теперь все боты и мини-приложения обязаны предоставлять свою собственную политику конфиденциальности и соблюдать правила диктуемые Telegram, Apple, Google и законы.
Основные нововведения:
Соответствие законодательству о конфиденциальности: Все боты и мини-приложения должны соблюдать все применимые законы и правила о конфиденциальности, включая требования Apple и Google.
Политика конфиденциальности:
- Все боты и мини-приложения должны иметь отдельную политику конфиденциальности, которая должна быть легко доступна пользователям.
- Мини-приложения должны разместить ссылку на политику конфиденциальности на странице «Настройки».
Автор: Иван Ашихмин
Telegram объявил о введении новых правил для ботов и мини-приложений, которые вступают в силу немедленно. Эти изменения направлены на усиление защиты данных пользователей и соблюдение международных стандартов конфиденциальности.
Коротко:
Теперь все боты и мини-приложения обязаны предоставлять свою собственную политику конфиденциальности и соблюдать правила диктуемые Telegram, Apple, Google и законы.
Основные нововведения:
Соответствие законодательству о конфиденциальности: Все боты и мини-приложения должны соблюдать все применимые законы и правила о конфиденциальности, включая требования Apple и Google.
Политика конфиденциальности:
- Все боты и мини-приложения должны иметь отдельную политику конфиденциальности, которая должна быть легко доступна пользователям.
- Мини-приложения должны разместить ссылку на политику конфиденциальности на странице «Настройки».
🔥3