Другое 🤖 Bongram Framework - Создай своего Telegram бота за 5 минут

triazovkirill

Новичок
Автор темы
6
2
Привет, Бластхак! Представляю Bongram — фреймворк для быстрого создания Telegram-ботов на готовых шаблонах.

Что это?​

Bongram позволяет запустить бота одной командой, без написания кода. Выбираете шаблон, указываете токен — бот готов.

13 готовых шаблонов​

  • Support — бот поддержки с админ-панелью
  • FAQ — база знаний с поиском
  • Giveaway — розыгрыши и конкурсы
  • Polling — опросы и голосования
  • Newsletter — массовые рассылки
  • Booking — бронирование времени
  • Quiz — викторины с рейтингом
  • Referral — реферальная программа
  • Feedback — сбор отзывов и оценок
  • Reminder — персональные напоминания
  • File Manager — файловый менеджер
  • Moderator — модерация групп
  • Payment Splitter — разделение счетов

Быстрый старт​

pip install bongram
bongram support YOUR_BOT_TOKEN
Готово. Бот работает.

Примеры использования​

bongram faq YOUR_BOT_TOKEN
bongram giveaway YOUR_BOT_TOKEN
bongram polling YOUR_BOT_TOKEN

Технологии​

  • Python 3.8+
  • aiogram 3.0
  • Без зависимостей от баз данных (все в памяти)
  • Готово к продакшену

Зачем это нужно?​

Экономьте время: вместо часов разработки — минуты на запуск. Все шаблоны протестированы и готовы к использованию.

Ссылки​

Планы​

  • Больше шаблонов
  • Интеграция с базами данных
  • Платежные системы
  • Расширенная аналитика
Пишите вопросы и предложения. Готов к обсуждению и улучшениям.
 

Ну погоди!

Активный
219
87
Ну, если делаешь на публику - соблюдай модульность и архитектуру проекта, даже для темплейтов.
Также, например, в https://github.com/THWEDOKA/bongram/blob/main/bongram/templates/moderator/bot.py - Бот модератор, ты слова проверяешь через список:
Код:
banned_words = []

Алгоритм антимата/заблокированных слов должен парсить строку с конца предложения, так как матерные слова в основном в конце предложения
Он должен исключать символы знаков препинания, восклицательные, вопросительные и любые другие символы
Он должен сжимать повторяющие буквы и приводить их к общему знаменателю, к примеру олеееень > олень > olehb

"Ты похож на олеееня"
"Ты похож на олеееня"
"Ты похож на олеееня"
"Ты похож на олееня"
"Ты похож на оленя"
"Ты похож на оленя"
"Ты похож на оленя"
"Ты похож на оленя" > ищем слово олень > "oleny"

В питоне есть profanity библиотеки, посмотри как это там устроенно
 

triazovkirill

Новичок
Автор темы
6
2
Ну, если делаешь на публику - соблюдай модульность и архитектуру проекта, даже для темплейтов.
Также, например, в https://github.com/THWEDOKA/bongram/blob/main/bongram/templates/moderator/bot.py - Бот модератор, ты слова проверяешь через список:
Код:
banned_words = []

Алгоритм антимата/заблокированных слов должен парсить строку с конца предложения, так как матерные слова в основном в конце предложения
Он должен исключать символы знаков препинания, восклицательные, вопросительные и любые другие символы
Он должен сжимать повторяющие буквы и приводить их к общему знаменателю, к примеру олеееень > олень > olehb

"Ты похож на олеееня"
"Ты похож на олеееня"
"Ты похож на олеееня"
"Ты похож на олееня"
"Ты похож на оленя"
"Ты похож на оленя"
"Ты похож на оленя"
"Ты похож на оленя" > ищем слово олень > "oleny"

В питоне есть profanity библиотеки, посмотри как это там устроенно
Спасибо за уточнение, делал первую версию фреймворка так чтобы было много темплейтов, поэтому с ними не особо парился
 

riverya4life

Известный
393
173
Спасибо за уточнение, делал первую версию фреймворка так чтобы было много темплейтов, поэтому с ними не особо парился
Привет Кирюха, для тебя специально настрочил, коряво конечно, но работает:
Python:
import re

{
  "ban_words": [
    "чучмек*", # чучмеки, чучмеку и т.д.
    "гeю*", # геюга к примеру
    "негр*", # негры, негритосики, негру и т.д.
  ]
} # условно хранишь слова в json там где то


def prepare_pattern(word: str) -> re.Pattern:
    word = word.lower()
 
    if word.endswith("*"):
        base = re.escape(word[:-1])
        pattern = rf'\b{base}[а-яёa-z]*\b'
    else:
        pattern = rf'\b{re.escape(word)}\b'
    
    return re.compile(pattern, re.IGNORECASE | re.UNICODE)

ban_patterns = [prepare_pattern(w) for w in ban_words]


def contains_banned(text: str) -> bool:
    return any(pat.search(text) for pat in ban_patterns)

Ну или вот так, как у меня в боте было с автомодом, самый ахуенный:
Python:
import re

BAN_WORDS = [
    "чучмек*", # чучмеки, чучмеку и т.д.
    "гeю*", # геюга к примеру
    "негр*", # негры, негритосики, негру и т.д.
]

PATTERNS = [
    re.compile(
        rf'\b{re.escape(w[:-1] if w.endswith("*") else w)}'
        rf'{"[а-яёa-z]*" if w.endswith("*") else ""}\b',
        re.IGNORECASE | re.UNICODE
    )
    for w in map(str.lower, BAN_WORDS)
]


def is_banned(text: str) -> bool:
    return any(p.search(text) for p in PATTERNS)
 
Последнее редактирование:

triazovkirill

Новичок
Автор темы
6
2
Привет Кирюха, для тебя специально настрочил, коряво конечно, но работает:
Python:
import re

{
  "ban_words": [
    "чучмек*", # чучмеки, чучмеку и т.д.
    "гeю*", # геюга к примеру
    "негр*", # негры, негритосики, негру и т.д.
  ]
} # условно хранишь слова в json там где то


def prepare_pattern(word: str) -> re.Pattern:
    word = word.lower()
 
    if word.endswith("*"):
        base = re.escape(word[:-1])
        pattern = rf'\b{base}[а-яёa-z]*\b'
    else:
        pattern = rf'\b{re.escape(word)}\b'
   
    return re.compile(pattern, re.IGNORECASE | re.UNICODE)

ban_patterns = [prepare_pattern(w) for w in ban_words]


def contains_banned(text: str) -> bool:
    return any(pat.search(text) for pat in ban_patterns)

Ну или вот так, как у меня в боте было с автомодом, самый ахуенный:
Python:
import re

BAN_WORDS = [
    "чучмек*", # чучмеки, чучмеку и т.д.
    "гeю*", # геюга к примеру
    "негр*", # негры, негритосики, негру и т.д.
]

PATTERNS = [
    re.compile(
        rf'\b{re.escape(w[:-1] if w.endswith("*") else w)}'
        rf'{"[а-яёa-z]*" if w.endswith("*") else ""}\b',
        re.IGNORECASE | re.UNICODE
    )
    for w in map(str.lower, BAN_WORDS)
]


def is_banned(text: str) -> bool:
    return any(p.search(text) for p in PATTERNS)
меня кто то знает, ничего себе, а это не ты мне помогал с музыкальным ботом? Спасибо за код