tgimguard -- anti-spam bot po tekstu s kartinok v Telegram
Bot dlia grupp/supergrupp: izvlekaet tekst s izobrazhenii cherez OpenAI i proveriaet na nalichie zapreshchionnogo teksta. Esli tekst soderzhit zapreshchionnye stroki, to udaliaet soobshchenie, banit otpravitelia i uvedomliaet vladel'tsa chata.
Vozmozhnosti
- OCR cherez OpenAI: izvlechenie vidimogo teksta iz izobrazhenii
- Fil'tratsiia po pravilam: podderzhka prostykh strok i reguliarnykh vyrazhenii
- Avtodeistviia: udalenie soobshcheniia, ban pol'zovatelia, uvedomlenie vladel'tsa chata
- Bezopasnost' i loggirovanie: rotatsiia logov v
logs/tgimguard.log
Trebovaniia
- Python: >= 3.12
- Telegram Bot Token
- OpenAI API Key (ili sovmestimyi API, esli meniaete
OPENAI_BASE_URL)
Bystryi start
- Sozdaite konfig na osnove primera:
env.example->.env - Zapolnite
.env: kak minimumTELEGRAM_BOT_TOKEN,OPENAI_BASE_URLiOPENAI_API_KEY - Ustanovite zavisimosti s ispol'zovaniem uv:
- Zapustite bota:
- Dobav'te bota v gruppu i vydaite emu prava administratora (udalenie soobshchenii, ban pol'zovatelei).
- Vladelets gruppy dolzhen zapustit' bota (/start), chtoby bot mog uvedomliat' ego o spame.
Peremennye okruzheniia (.env)
TELEGRAM_BOT_TOKEN-- token bota (obiazatel'no)OPENAI_API_KEY-- kliuch OpenAI (obiazatel'no)OPENAI_BASE_URL-- bazovyi URL API (po umolchaniiuhttps://api.openai.com/v1)OPENAI_MODEL_ID-- model', po umolchaniiugpt-4o-mini
Pravila fil'tratsii
Pravila fil'tratsii opredeleny v YAML-failakh v kataloge rules/. Kazhdyi fail *.yaml -- eto odno pravilo.
Struktura pravila:
min_matches: 2
patterns:
- type: literal
value: stroka dlia poiska
- type: regex
value: reguliarnoe vyrazhenie
Parametry:
name-- chelovekochitaemoe nazvanie pravila (optsional'no)min_matches-- minimal'noe kolichestvo unikal'nykh patternov, kotorye dolzhny sovpast', chtoby pravilo srabotalopatterns-- massiv patternov dlia proverki:type: literal-- prostaia podstroka, poisk bez uchiota registratype: regex-- reguliarnoe vyrazhenie Python (flagi cherez inline, naprimer(?i))
Logika srabatyvaniia:
Pravilo srabatyvaet, esli v tekste naideno >= min_matches unikal'nykh patternov.
Primery:
Prostoe pravilo (1 pattern):
min_matches: 1
patterns:
- type: literal
value: buy now
Kombinirovannoe pravilo (neskol'ko patternov):
min_matches: 2
patterns:
- type: literal
value: voditel'sk
- type: literal
value: prav
- type: literal
value: udostoverenie
V etom primere pravilo srabotaet, esli naideny khotia by 2 iz 3 slov.
IMAGE_COMPRESSION_THRESHOLD_KB-- porog razmera, vyshe kotorogo izobrazhenie resaizitsia i preobrazuiutsia v JPEGIMAGE_RESIZE_WIDTH_PX-- shirina v pikseliakh pri resaizeCHAT_OWNER_ID-- ID vladel'tsa chata dlia uvedomlenii (optsional'no, inache avtoopredelenie)
Kak eto rabotaet
- Pol'zovatel' otpravliaet izobrazhenie v gruppovoi chat
- Bot skachivaet fail, pri neobkhodimosti szhimaet/resaizit
- Otpravliaet v OpenAI i poluchaet izvlechionnyi s izobrazheniia tekst
- Proveriaet tekst na sootvetstvie liubomu pravilu iz
rules/ - Pri sovpadenii: udaliaet soobshchenie, banit otpravitelia, uvedomliaet vladel'tsa gruppy
Logi
- Fail:
logs/tgimguard.log(sutochnaia rotatsiia, khranenie 30 dnei)
Primechaniia
- Bot reagiruet tol'ko v chatakh tipov
groupisupergroup - Dlia korrektnoi raboty nuzhny prava: udalenie soobshchenii i ban pol'zovatelei
- Chem proshche i koroche spisok pravil, tem men'she lozhnykh srabatyvanii