aboutsummaryrefslogtreecommitdiff
path: root/bot.py
blob: bda0dfd8ec776e698e8444e32a6d3bb09d946ed6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import logging
import os

from utils.mail import EmailClient
from telegram import ParseMode
from telegram.constants import MAX_MESSAGE_LENGTH
from telegram.ext import (Updater, CommandHandler)


logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
                    level=logging.INFO)
logger = logging.getLogger(__name__)

bot_token = os.environ['TELEGRAM_TOKEN']


def error(bot, update, _error):
    """Log Errors caused by Updates."""
    logger.warning('Update "%s" caused error "%s"', update, _error)

def start_callback(bot, update):
    msg = "Use /help to get help"
    update.message.reply_text(msg)

def _help(bot, update):
    """Send a message when the command /help is issued."""
    help_str = "*Mailbox Setting*: \n" \
               "/setting [email protected] yourpassword"
    bot.send_message(update.message.chat_id, 
                    parse_mode=ParseMode.MARKDOWN,
                    text=help_str)

def setting_email(bot, update, args):
    global email_addr, email_passwd
    email_addr = args[0]
    email_passwd = args[1]

    update.message.reply_text("Configure email success!")

def inbox(bot, update):
    with EmailClient(email_addr, email_passwd) as client:
        num_of_mails = client.get_mails_count()
        reply_text = "The index of newest mail is *%d*" % num_of_mails
        bot.send_message(update.message.chat_id,
                        parse_mode=ParseMode.MARKDOWN,
                        text=reply_text)

def get_email(bot, update, args):
    index = args[0]
    with EmailClient(email_addr, email_passwd) as client:
        mail = client.get_mail_by_index(index)
        subject = "*Subject*: %s\n" % mail.subject
        sender = "*From*: %s - %s\n" % (mail.from_nickname, mail.from_account)
        date = "*Date*: %s\n" % mail.receivedtime
        bot.send_message(update.message.chat_id,
                         parse_mode=ParseMode.MARKDOWN,
                         text=subject+sender+date)
        if len(mail.text_content) > MAX_MESSAGE_LENGTH:
            text = mail.text_content[0:4096]
            bot.send_message(update.message.chat_id,
                             text=text)
            mail.text_content = mail.text_content.lstrip(text)
        if mail.text_content:
            bot.send_message(update.message.chat_id,
                             text=mail.text_content)
        


def main():
    # Create the EventHandler and pass it your bot's token.
    updater = Updater(token=bot_token)

    # Get the dispatcher to register handlers
    dp = updater.dispatcher

    # simple start function
    dp.add_handler(CommandHandler("start", start_callback))

    dp.add_handler(CommandHandler("help", _help))
    #
    #  Add command handler to set email address and account.
    dp.add_handler(CommandHandler("setting", setting_email, pass_args=True))

    dp.add_handler(CommandHandler("inbox", inbox))

    dp.add_handler(CommandHandler("get", get_email, pass_args=True))


    dp.add_error_handler(error)

    # Start the Bot
    updater.start_polling()

    # Run the bot until you press Ctrl-C or the process receives SIGINT,
    # SIGTERM or SIGABRT. This should be used most of the time, since
    # start_polling() is non-blocking and will stop the bot gracefully.
    updater.idle()


if __name__ == '__main__':
    main()