2013-03-13 3 views
0

Я ищу, чтобы начать новый проект, чтобы мои ноги были мокрыми с Python. У меня есть канал IRC, и я хочу, чтобы у меня был бот, который ведет журнал и выдает строки сообщений, когда подскажет, но я не знаю, с чего начать писать что-то подобное.Python IRC Log Bot

Я вижу this учебник, и я думаю, что это заставит меня начать сам бот, но я не уверен, куда идти дальше для функции ведения журнала. Может ли кто-нибудь указать мне в правильном направлении?

+1

Для выполнения функций ведения журнала я бы просто сохранил простой список из 100 последних строк и любых других строк, которые я бы нажал на файл. [Python File I/O] (http://docs.python.org/2/tutorial/inputoutput.html#reading-and-writing-files) – sean

+1

Я бы искал учебник более высокого уровня. Выполнение IRC с сырыми сокетами и явный синтаксический анализ команд - это не самая сложная вещь в мире, но это не то, что я сделал бы, чтобы начать. Либо возьмите скелет-бот или ботовую структуру, как SupyBot, либо используйте библиотеку типа 'irclib' или' twisted.IRCClient'. – abarnert

ответ

1

Предположим, вы написали функцию отправки, которая вызывает соответствующий обработчик для каждого типа сообщений и функцию отправки, которая форматирует и отправляет сообщения соответствующим образом.

Обработчики может выглядеть примерно так:

MAX_LINES = 100 

channel_logs = defaultdict(list) 

def handle_public_message(user, channel, msg): 
    log = logs[channel] 
    log.append((user, msg)) 
    if len(log) > MAX_LINES: 
     log.pop(0) 
    if msg.partition(' ')[0].lower() == 'dumplog': 
     dumplog(log, channel) 

def handle_private_message(user, channel, msg): 
    if msg.partition(' ')[0].lower() == 'dumplog': 
     dumplog(logs[channel], channel, user) 

def dumplog(log, channel, user=None): 
    for line in log: 
     send_msg(line, channel, user) 

Это все есть на него.

Если вы хотите получить фантазию, вы можете написать класс, который завершает «список, который хранит только последние 100 приложений», делает его кэшем для записи, который хранится на диске, добавляет способ запроса только 20 строк вместо 100 и т. Д.

Вы также можете добавить больше функций, специфичных для бота, например, для команд управления более стандартизованным способом. Но на самом деле, вам лучше получить ботовую основу для этого.

На самом деле, я настоятельно рекомендую вам не начинать свой первый проект с использованием сырых сокетов и синтаксического анализа команд. Вы потратите гораздо больше времени на отладку утомительных и раздражающих проблем вместо того, чтобы иметь дело с вашим фактическим кодом. Другие варианты включают в себя:

  • Полный бот с плагинами «AI» Python, например supybot.
  • Скелет-бот с комментариями «добавьте свой код здесь», о котором вы можете найти около 3000 от быстрого поиска.
  • twisted рамочный код IRCClient. Посмотрите на обучающие программы, например, this one, чтобы узнать, насколько высок уровень и все проще.
  • irclib.
Смежные вопросы