61 lines
2.5 KiB
Python
61 lines
2.5 KiB
Python
import logging
|
|
from telegram import Update
|
|
from telegram.ext import ContextTypes
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
def _svc(context: ContextTypes.DEFAULT_TYPE):
|
|
return context.application.bot_data["services"] # BotServices
|
|
|
|
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
|
|
if update.effective_chat:
|
|
s = _svc(context)
|
|
await s.chats.upsert_chat(
|
|
bot=s.bot,
|
|
chat_id=update.effective_chat.id,
|
|
chat_type=update.effective_chat.type,
|
|
title=getattr(update.effective_chat, "title", "") or "",
|
|
username=getattr(update.effective_chat, "username", "") or "",
|
|
is_member=True,
|
|
touch_last_message=True,
|
|
)
|
|
user = update.effective_user
|
|
await update.effective_message.reply_text(f"Привет, {user.first_name or 'друг'}! Я бот автопостинга.")
|
|
|
|
async def ping(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
|
|
await update.effective_message.reply_text("pong")
|
|
|
|
async def echo(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
|
|
if update.effective_chat:
|
|
s = _svc(context)
|
|
await s.chats.upsert_chat(
|
|
bot=s.bot,
|
|
chat_id=update.effective_chat.id,
|
|
chat_type=update.effective_chat.type,
|
|
title=getattr(update.effective_chat, "title", "") or "",
|
|
username=getattr(update.effective_chat, "username", "") or "",
|
|
is_member=True,
|
|
touch_last_message=True,
|
|
)
|
|
await update.effective_message.reply_text(update.effective_message.text)
|
|
|
|
async def my_chat_member_update(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
|
|
try:
|
|
chat = update.effective_chat
|
|
status = update.my_chat_member.new_chat_member.status # administrator|member|left|kicked
|
|
is_member = status in ("administrator", "member")
|
|
s = _svc(context)
|
|
await s.chats.upsert_chat(
|
|
bot=s.bot,
|
|
chat_id=chat.id,
|
|
chat_type=chat.type,
|
|
title=getattr(chat, "title", "") or "",
|
|
username=getattr(chat, "username", "") or "",
|
|
is_member=is_member,
|
|
)
|
|
logger.info("my_chat_member: %s in %s (%s)", status, chat.id, chat.type)
|
|
except Exception:
|
|
logger.exception("Failed to process my_chat_member update")
|
|
|
|
async def error_handler(update: object, context: ContextTypes.DEFAULT_TYPE) -> None:
|
|
logger.exception("PTB error: %s", context.error) |