WIP: analytics
This commit is contained in:
parent
2e7d4aa263
commit
e8541b5160
@ -39,10 +39,10 @@ from modules.callbacks.sub import *
|
|||||||
from modules.callbacks.sus import *
|
from modules.callbacks.sus import *
|
||||||
from modules.callbacks.warnings import *
|
from modules.callbacks.warnings import *
|
||||||
|
|
||||||
|
from modules.handlers.analytics_group import *
|
||||||
from modules.handlers.confirmation import *
|
from modules.handlers.confirmation import *
|
||||||
from modules.handlers.contact import *
|
from modules.handlers.contact import *
|
||||||
from modules.handlers.group_member_update import *
|
from modules.handlers.group_member_update import *
|
||||||
from modules.handlers.group_message import *
|
|
||||||
from modules.handlers.voice import *
|
from modules.handlers.voice import *
|
||||||
from modules.handlers.welcome import *
|
from modules.handlers.welcome import *
|
||||||
from modules.handlers.everything import *
|
from modules.handlers.everything import *
|
||||||
|
@ -37,6 +37,8 @@ for collection in [
|
|||||||
"warnings",
|
"warnings",
|
||||||
"applications",
|
"applications",
|
||||||
"sponsorships",
|
"sponsorships",
|
||||||
|
"analytics_group",
|
||||||
|
"analytics_users"
|
||||||
]:
|
]:
|
||||||
if not collection in collections:
|
if not collection in collections:
|
||||||
db.create_collection(collection)
|
db.create_collection(collection)
|
||||||
@ -51,5 +53,7 @@ col_messages = db.get_collection("messages")
|
|||||||
col_warnings = db.get_collection("warnings")
|
col_warnings = db.get_collection("warnings")
|
||||||
col_applications = db.get_collection("applications")
|
col_applications = db.get_collection("applications")
|
||||||
col_sponsorships = db.get_collection("sponsorships")
|
col_sponsorships = db.get_collection("sponsorships")
|
||||||
|
col_analytics_group = db.get_collection("analytics_group")
|
||||||
|
col_analytics_users = db.get_collection("analytics_users")
|
||||||
|
|
||||||
col_applications.create_index([("application.3.location", GEOSPHERE)])
|
col_applications.create_index([("application.3.location", GEOSPHERE)])
|
||||||
|
247
modules/handlers/analytics_group.py
Normal file
247
modules/handlers/analytics_group.py
Normal file
@ -0,0 +1,247 @@
|
|||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
from polyglot.detect import Detector
|
||||||
|
from pyrogram import filters
|
||||||
|
from pyrogram.client import Client
|
||||||
|
from pyrogram.enums import MessageEntityType, PollType
|
||||||
|
from pyrogram.types import Message
|
||||||
|
|
||||||
|
from app import app
|
||||||
|
from modules import custom_filters
|
||||||
|
from modules.database import col_analytics_group
|
||||||
|
from modules.logging import logWrite
|
||||||
|
from modules.utils import configGet
|
||||||
|
|
||||||
|
|
||||||
|
@app.on_message(
|
||||||
|
custom_filters.enabled_general
|
||||||
|
& ~filters.scheduled
|
||||||
|
& filters.chat(configGet("users", "groups"))
|
||||||
|
)
|
||||||
|
async def msg_destination_group(app: Client, msg: Message):
|
||||||
|
analytics_entry = {
|
||||||
|
"id": msg.id,
|
||||||
|
"user": msg.from_user.id,
|
||||||
|
"date": datetime.now(),
|
||||||
|
"reply": {
|
||||||
|
"id": msg.reply_to_message_id,
|
||||||
|
"top_id": msg.reply_to_top_message_id,
|
||||||
|
"user": None
|
||||||
|
if msg.reply_to_message is None
|
||||||
|
else msg.reply_to_message.from_user.id,
|
||||||
|
},
|
||||||
|
"forward": {
|
||||||
|
"id": msg.forward_from_message_id,
|
||||||
|
"chat": None if msg.forward_from_chat is None else msg.forward_from_chat.id,
|
||||||
|
"user": None if msg.forward_from is None else msg.forward_from.id,
|
||||||
|
"date": msg.forward_date,
|
||||||
|
},
|
||||||
|
"media_spoilered": msg.has_media_spoiler,
|
||||||
|
"entities": {"links": [], "mentions": []},
|
||||||
|
"text": None,
|
||||||
|
"language": None,
|
||||||
|
"language_confidence": None,
|
||||||
|
"animation": None,
|
||||||
|
"audio": None,
|
||||||
|
"contact": None,
|
||||||
|
"document": None,
|
||||||
|
"location": None,
|
||||||
|
"photo": None,
|
||||||
|
"poll": None,
|
||||||
|
"sticker": None,
|
||||||
|
"venue": None,
|
||||||
|
"video": None,
|
||||||
|
"videonote": None,
|
||||||
|
"voice": None,
|
||||||
|
}
|
||||||
|
|
||||||
|
if msg.text is not None or msg.caption is not None:
|
||||||
|
text = msg.text if msg.text is not None else msg.caption
|
||||||
|
analytics_entry["text"] = text
|
||||||
|
|
||||||
|
if msg.entities is not None or msg.caption_entities is not None:
|
||||||
|
entities = (
|
||||||
|
msg.entities if msg.entities is not None else msg.caption_entities
|
||||||
|
)
|
||||||
|
for entity in entities:
|
||||||
|
if entity.type == MessageEntityType.TEXT_LINK:
|
||||||
|
analytics_entry["entities"]["links"].append(entity.url)
|
||||||
|
elif entity.type == MessageEntityType.TEXT_MENTION:
|
||||||
|
analytics_entry["entities"]["mentions"].append(entity.user.id)
|
||||||
|
|
||||||
|
lang = Detector(text, quiet=True).language
|
||||||
|
|
||||||
|
analytics_entry["language"] = lang.code
|
||||||
|
analytics_entry["language_confidence"] = lang.confidence
|
||||||
|
|
||||||
|
if lang.code == "ru":
|
||||||
|
logWrite(
|
||||||
|
f"Message '{text}' from {msg.from_user.first_name} ({msg.from_user.id}) is fucking russian [confidence {lang.confidence}]"
|
||||||
|
)
|
||||||
|
|
||||||
|
if msg.animation is not None:
|
||||||
|
analytics_entry["animation"] = {
|
||||||
|
"id": msg.animation.file_id,
|
||||||
|
"duration": msg.animation.duration,
|
||||||
|
"height": msg.animation.height,
|
||||||
|
"width": msg.animation.width,
|
||||||
|
"file_name": msg.animation.file_name,
|
||||||
|
"mime_type": msg.animation.mime_type,
|
||||||
|
}
|
||||||
|
|
||||||
|
if msg.audio is not None:
|
||||||
|
analytics_entry["audio"] = {
|
||||||
|
"id": msg.audio.file_id,
|
||||||
|
"title": msg.audio.title,
|
||||||
|
"performer": msg.audio.performer,
|
||||||
|
"duration": msg.audio.duration,
|
||||||
|
"file_name": msg.audio.file_name,
|
||||||
|
"file_size": msg.audio.file_size,
|
||||||
|
"mime_type": msg.audio.mime_type,
|
||||||
|
}
|
||||||
|
|
||||||
|
if msg.contact is not None:
|
||||||
|
analytics_entry["contact"] = {
|
||||||
|
"id": msg.contact.user_id,
|
||||||
|
"first_name": msg.contact.first_name,
|
||||||
|
"last_name": msg.contact.last_name,
|
||||||
|
"phone_number": msg.contact.phone_number,
|
||||||
|
"vcard": msg.contact.vcard,
|
||||||
|
}
|
||||||
|
|
||||||
|
if msg.document is not None:
|
||||||
|
analytics_entry["document"] = {
|
||||||
|
"id": msg.document.file_id,
|
||||||
|
"file_name": msg.document.file_name,
|
||||||
|
"file_size": msg.document.file_size,
|
||||||
|
"mime_type": msg.document.mime_type,
|
||||||
|
}
|
||||||
|
|
||||||
|
if msg.location is not None:
|
||||||
|
analytics_entry["location"] = {
|
||||||
|
"longitude": msg.location.longitude,
|
||||||
|
"latitude": msg.location.latitude,
|
||||||
|
}
|
||||||
|
|
||||||
|
if msg.photo is not None:
|
||||||
|
thumbnails = []
|
||||||
|
for thumbail in msg.photo.thumbs:
|
||||||
|
thumbnails.append(
|
||||||
|
{
|
||||||
|
"id": thumbail.file_id,
|
||||||
|
"height": thumbail.height,
|
||||||
|
"width": thumbail.width,
|
||||||
|
"file_size": thumbail.file_size,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
analytics_entry["photo"] = {
|
||||||
|
"id": msg.photo.file_id,
|
||||||
|
"height": msg.photo.height,
|
||||||
|
"width": msg.photo.width,
|
||||||
|
"file_size": msg.photo.file_size,
|
||||||
|
"thumbnails": thumbnails,
|
||||||
|
}
|
||||||
|
|
||||||
|
if msg.poll is not None:
|
||||||
|
options = []
|
||||||
|
for option in msg.poll.options:
|
||||||
|
options.append(option.text)
|
||||||
|
analytics_entry["poll"] = {
|
||||||
|
"id": msg.poll.id,
|
||||||
|
"question": msg.poll.question,
|
||||||
|
"open_period": msg.poll.open_period,
|
||||||
|
"close_date": msg.poll.close_date,
|
||||||
|
"options": options,
|
||||||
|
"correct_option": msg.poll.correct_option_id,
|
||||||
|
"explanation": msg.poll.explanation,
|
||||||
|
"anonymous": msg.poll.is_anonymous,
|
||||||
|
"multiple_answers": msg.poll.allows_multiple_answers,
|
||||||
|
"quiz": True if msg.poll.type == PollType.QUIZ else False,
|
||||||
|
}
|
||||||
|
|
||||||
|
if msg.sticker is not None:
|
||||||
|
thumbnails = []
|
||||||
|
for thumbail in msg.sticker.thumbs:
|
||||||
|
thumbnails.append(
|
||||||
|
{
|
||||||
|
"id": thumbail.file_id,
|
||||||
|
"height": thumbail.height,
|
||||||
|
"width": thumbail.width,
|
||||||
|
"file_size": thumbail.file_size,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
analytics_entry["sticker"] = {
|
||||||
|
"id": msg.sticker.file_id,
|
||||||
|
"emoji": msg.sticker.emoji,
|
||||||
|
"set_name": msg.sticker.set_name,
|
||||||
|
"animated": msg.sticker.is_animated,
|
||||||
|
"video": msg.sticker.is_video,
|
||||||
|
"height": msg.sticker.height,
|
||||||
|
"width": msg.sticker.width,
|
||||||
|
"file_name": msg.sticker.file_name,
|
||||||
|
"file_size": msg.sticker.file_size,
|
||||||
|
"mime_type": msg.sticker.mime_type,
|
||||||
|
"thumbnails": thumbnails,
|
||||||
|
}
|
||||||
|
|
||||||
|
if msg.venue is not None:
|
||||||
|
analytics_entry["venue"] = {
|
||||||
|
"title": msg.venue.title,
|
||||||
|
"address": msg.venue.address,
|
||||||
|
"longitude": msg.venue.location.longitude,
|
||||||
|
"latitude": msg.venue.location.latitude,
|
||||||
|
"foursquare_id": msg.venue.foursquare_id,
|
||||||
|
"foursquare_type": msg.venue.foursquare_type,
|
||||||
|
}
|
||||||
|
|
||||||
|
if msg.video is not None:
|
||||||
|
thumbnails = []
|
||||||
|
for thumbail in msg.video.thumbs:
|
||||||
|
thumbnails.append(
|
||||||
|
{
|
||||||
|
"id": thumbail.file_id,
|
||||||
|
"height": thumbail.height,
|
||||||
|
"width": thumbail.width,
|
||||||
|
"file_size": thumbail.file_size,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
analytics_entry["video"] = {
|
||||||
|
"id": msg.video.file_id,
|
||||||
|
"duration": msg.video.duration,
|
||||||
|
"height": msg.video.height,
|
||||||
|
"width": msg.video.width,
|
||||||
|
"file_name": msg.video.file_name,
|
||||||
|
"file_size": msg.video.file_size,
|
||||||
|
"mime_type": msg.video.mime_type,
|
||||||
|
"thumbnails": thumbnails,
|
||||||
|
}
|
||||||
|
|
||||||
|
if msg.video_note is not None:
|
||||||
|
thumbnails = []
|
||||||
|
for thumbail in msg.video_note.thumbs:
|
||||||
|
thumbnails.append(
|
||||||
|
{
|
||||||
|
"id": thumbail.file_id,
|
||||||
|
"height": thumbail.height,
|
||||||
|
"width": thumbail.width,
|
||||||
|
"file_size": thumbail.file_size,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
analytics_entry["video_note"] = {
|
||||||
|
"id": msg.video_note.file_id,
|
||||||
|
"duration": msg.video_note.duration,
|
||||||
|
"length": msg.video_note.length,
|
||||||
|
"file_size": msg.video_note.file_size,
|
||||||
|
"mime_type": msg.video_note.mime_type,
|
||||||
|
"thumbnails": thumbnails,
|
||||||
|
}
|
||||||
|
|
||||||
|
if msg.voice is not None:
|
||||||
|
analytics_entry["voice"] = {
|
||||||
|
"id": msg.voice.file_id,
|
||||||
|
"duration": msg.voice.duration,
|
||||||
|
"file_size": msg.voice.file_size,
|
||||||
|
"mime_type": msg.voice.mime_type,
|
||||||
|
}
|
||||||
|
|
||||||
|
col_analytics_group.insert_one(analytics_entry)
|
@ -1,45 +0,0 @@
|
|||||||
from datetime import datetime
|
|
||||||
from app import app
|
|
||||||
from pyrogram import filters
|
|
||||||
from pyrogram.types import Message
|
|
||||||
from pyrogram.client import Client
|
|
||||||
from modules.logging import logWrite
|
|
||||||
from modules.utils import configGet, locale
|
|
||||||
from modules.database import col_warnings
|
|
||||||
from modules import custom_filters
|
|
||||||
from polyglot.detect import Detector
|
|
||||||
|
|
||||||
|
|
||||||
@app.on_message(
|
|
||||||
custom_filters.enabled_general
|
|
||||||
& ~filters.scheduled
|
|
||||||
& filters.chat(configGet("users", "groups"))
|
|
||||||
)
|
|
||||||
async def msg_destination_group(app: Client, msg: Message):
|
|
||||||
if msg.text is not None:
|
|
||||||
lang = Detector(msg.text, quiet=True).language
|
|
||||||
if lang.code == "ru":
|
|
||||||
logWrite(
|
|
||||||
f"Message '{msg.text}' from {msg.from_user.first_name} ({msg.from_user.id}) is fucking russian!!! [confidence {lang.confidence}]"
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
logWrite(
|
|
||||||
f"Message '{msg.text}' from {msg.from_user.first_name} ({msg.from_user.id}) is written {lang.code} [confidence {lang.confidence}]"
|
|
||||||
)
|
|
||||||
return
|
|
||||||
elif msg.caption is not None:
|
|
||||||
lang = Detector(msg.caption, quiet=True).language
|
|
||||||
if lang.code == "ru":
|
|
||||||
logWrite(
|
|
||||||
f"Message '{msg.caption}' from {msg.from_user.first_name} ({msg.from_user.id}) is fucking russian!!! [confidence {lang.confidence}]"
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
logWrite(
|
|
||||||
f"Message '{msg.caption}' from {msg.from_user.first_name} ({msg.from_user.id}) is written {lang.code} [confidence {lang.confidence}]"
|
|
||||||
)
|
|
||||||
return
|
|
||||||
else:
|
|
||||||
logWrite(
|
|
||||||
f"Message from {msg.from_user.first_name} ({msg.from_user.id}) has no text in it."
|
|
||||||
)
|
|
||||||
return
|
|
Reference in New Issue
Block a user