Skip to content

Instantly share code, notes, and snippets.

@Originat
Forked from frostming/napkin.py
Created July 10, 2022 17:53
Show Gist options
  • Save Originat/683bafe9f766f9e043441a8db78ac46f to your computer and use it in GitHub Desktop.
Save Originat/683bafe9f766f9e043441a8db78ac46f to your computer and use it in GitHub Desktop.

Revisions

  1. @frostming frostming created this gist Apr 30, 2021.
    58 changes: 58 additions & 0 deletions napkin.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,58 @@
    from napkin import response, request
    import requests
    import json

    TELEGRAM_BOT_TOKEN = 'xxxxxx'
    TELEGRAM_CHAT_ID = 'xxxxx'


    def format_message(data):
    """data example:
    {
    "type": "new_comment",
    "data": {
    "by_nickname": "xxx",
    "by_email": "xxx",
    "content": "xxx",
    "page_id": "xxx",
    "page_title": "xxx", // page title, maybe NULL
    "project_title": "haha", // project title
    "approve_link": "" // use this link to approve this comment without login
    }
    }
    """
    data_type = data['type'].replace('_', ' ').capitalize()
    message_tmpl = """_{data_type} on *{page_title}* on website *{project_title}*:_
    ```
    {content}
    ```
    by: *{by_nickname}*
    """
    return message_tmpl.format(data_type=data_type, **data['data'])


    def send_to_telegram(data=None):
    data = data or json.loads(request.data)
    url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage"
    message = format_message(data)
    reply_markup = {
    'inline_keyboard': [[{'text': 'Approve', 'url': data['data'].get('approve_link')}]]
    }
    resp = requests.post(
    url,
    data={
    'chat_id': TELEGRAM_CHAT_ID,
    'text': message,
    'parse_mode': 'MarkdownV2',
    'reply_markup': json.dumps(reply_markup)
    }
    )
    return resp.json(), resp.status_code

    resp, status_code = send_to_telegram()
    response.status_code = status_code
    response.body = resp
    response.headers = {
    'Content-Type': 'application/json'
    }