Как я могу провести опрос через бот irc? - PullRequest
4 голосов
/ 28 марта 2011

Я установил бот irc с помощью сокета.Я добавил несколько команд, но я бы хотел добавить функцию «опрос».В идеале, бот получит команду в следующем формате:

!poll <name> <opt1> <opt2> <opt3> <time>

Как бы я проверил пользователя, который проголосовал, и завершил опрос через определенное время?

Заранее спасибо,

Отчаянный начинающий Python.

РЕДАКТИРОВАТЬ: Большое спасибо за ответы, ребята, я пошел с использованием глобальных переменных (я знаю, я знаю), потому что я не мог понятькак это сделать иначе.Еще раз большое спасибо!

1 Ответ

1 голос
/ 31 марта 2011

Ну, я начинаю немного ржаветь с моим Python, но я думаю, что могу ответить на этот вопрос - это может быть не самый лучший ответ.

Если вы планируете проводить много опросов наОднажды вы могли бы реализовать словарь, содержащий несколько экземпляров пользовательского класса, например, Poll. Вот возможное решение:

class PollVotes(object):
    def __init__(self):
        self.votes = []
        self.stoptime = "some date/time" #I can't remember how to do this bit ;)

    def add_vote(self, vote_value): 
        self.votes.append(vote_value);

    def tally_votes(self):
        return self.votes.size()

    def has_closed(self):
        if time_now >= self.stoptime: # I forget how you'd do this exactly, but it's for sake of example
            return True
        else:
            return False

#then use it something like this
poll_list = {}
#irc processing...
if got_vote_command:
    if poll_list["channel_or_poll_name"].has_ended(): 
        send("You can no longer vote.")
    else:
        poll_list["channel_or_poll_name"].add_vote(persons_vote)
        #send the tally
        send("%d people have now voted!" % poll_list["channel_or_poll_name"].tally_votes())

Конечно, вам нужно будет отредактировать класс опроса в соответствии с вашими потребностями, т.е.чтобы разрешить множественные значения в голосовании, записать, кто за что голосует (если вы этого хотите) и т. д.

Что касается проверки того, завершился ли опрос, вы можете отредактировать класс опроса, чтобы иметь время окончания,и иметь функцию, которая возвращает True / False независимо от того, прошло это время или нет.Возможно, посмотрите документы для модуля datetime ...?

В любом случае, надеюсь, это поможет.

...