示例#1
0
def poll_status(bot: DeltaBot, args: str, message: Message,
                replies: Replies) -> None:
    """Get poll status."""
    addr = message.get_sender_contact().addr
    if args:
        try:
            with session_scope() as session:
                poll = session.query(Poll).filter_by(id=int(args[0])).one()
                is_admin = addr == poll.addr
                voted = is_admin or addr in [v.addr for v in poll.votes]
                if voted:
                    text, html = _format_poll(bot,
                                              poll,
                                              voted=True,
                                              is_admin=is_admin)
                else:
                    text = "❌ You can't see poll status until you vote"
                    html = None
            replies.add(text=text, html=html, chat=message.get_sender_chat())
        except NoResultFound:
            replies.add(text="❌ Invalid poll",
                        quote=message,
                        chat=message.get_sender_chat())
    else:
        replies.add(text="❌ Invalid poll",
                    quote=message,
                    chat=message.get_sender_chat())
示例#2
0
def vote(bot: DeltaBot, args: str, message: Message, replies: Replies) -> None:
    """Vote in polls."""
    if len(args) == 2:
        option_id = int(args[1])
        addr = message.get_sender_contact().addr
        try:
            with session_scope() as session:
                poll = session.query(Poll).filter_by(id=int(args[0])).one()
                if addr in [v.addr for v in poll.votes]:
                    text, html = "❌ You already voted", None
                elif option_id not in [o.id for o in poll.options]:
                    text, html = "❌ Invalid option number", None
                else:
                    poll.votes.append(Vote(addr=addr, value=option_id))
                    is_admin = addr == poll.addr
                    text, html = _format_poll(bot,
                                              poll,
                                              voted=True,
                                              is_admin=is_admin)
            replies.add(text=text, html=html, chat=message.get_sender_chat())
        except NoResultFound:
            replies.add(text="❌ Invalid poll",
                        quote=message,
                        chat=message.get_sender_chat())
    else:
        replies.add(text="❌ Invalid poll",
                    quote=message,
                    chat=message.get_sender_chat())
示例#3
0
def poll_end(bot: DeltaBot, args: str, message: Message,
             replies: Replies) -> None:
    """Close the poll with the given id."""
    if args:
        addr = message.get_sender_contact().addr
        try:
            with session_scope() as session:
                poll = session.query(Poll).filter_by(id=int(args[0]),
                                                     addr=addr).one()
                text, html = _format_poll(bot, poll, closed=True)
                addresses = set(vote.addr for vote in poll.votes)
                session.delete(poll)
            addresses.add(addr)
            for addr in addresses:
                contact = bot.get_contact(addr)
                if not contact.is_blocked():
                    replies.add(text=text,
                                html=html,
                                chat=bot.get_chat(contact))
        except NoResultFound:
            replies.add(text="❌ Invalid poll",
                        quote=message,
                        chat=message.get_sender_chat())
    else:
        replies.add(text="❌ Invalid poll",
                    quote=message,
                    chat=message.get_sender_chat())
示例#4
0
def poll_settings(args: str, message: Message, replies: Replies) -> None:
    """Get poll's advanced settings."""
    if args:
        try:
            with session_scope() as session:
                poll = (session.query(Poll).filter_by(
                    id=int(args[0]),
                    addr=message.get_sender_contact().addr).one())
                text = "📊 /poll_get_{0}\n{1}\n\n🛑 /poll_end_{0}".format(
                    poll.id, poll.question)
            replies.add(text=text, chat=message.get_sender_chat())
        except NoResultFound:
            replies.add(text="❌ Invalid poll",
                        quote=message,
                        chat=message.get_sender_chat())
    else:
        replies.add(text="❌ Invalid poll",
                    quote=message,
                    chat=message.get_sender_chat())
示例#5
0
def poll_list(message: Message, replies: Replies) -> None:
    """Show your public polls."""
    with session_scope() as session:
        text = ""
        for poll in (session.query(Poll).filter_by(
                addr=message.get_sender_contact().addr).all()):
            if len(poll.question) > 100:
                q = poll.question[:100] + "..."
            else:
                q = poll.question
            text += "📊 /poll_get_{} {}\n\n".format(poll.id, q)
    replies.add(text=text or "❌ Empty list", chat=message.get_sender_chat())