Paste: bot src

Author: slava
Mode: factor
Date: Tue, 2 Dec 2008 03:46:26
Plain Text |
! Copyright (C) 2008 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: fry irc.client irc.client.private kernel namespaces
sequences threads io.encodings.8-bit io.launcher io splitting
make mason.common mason.updates calendar ;
IN: irc.gitbot

: bot-profile ( -- obj )
    "irc.freenode.org" 6667 "jackass" f <irc-profile> ;

: bot-channel ( -- seq ) "#concatenative" ;

: bot-loop ( chat -- )
    dup hear drop bot-loop ;

: start-bot ( -- chat )
    bot-profile <irc-client>
    [ connect-irc ]
    [
        [ bot-channel <irc-channel-chat> dup ] dip
        '[ _ [ _ attach-chat ] [ bot-loop ] bi ]
        "GitBot" spawn drop
    ] bi ;

: git-log ( from to -- lines )
    [ "git-log" , "--no-merges" , "--pretty=format:%h %an: %s" , ".." swap 3append , ] { } make
    latin1 [ input-stream get lines ] with-process-reader ;

: report-updates ( from to chat -- )
    [ git-log ] dip [ 3 seconds sleep ] swap '[ _ speak ] interleave ;

: check-for-updates ( chat -- )
    [ git-id git-pull-cmd short-running-process git-id ] dip
    report-updates ;

Annotation: update

Author: slava
Mode: factor
Date: Tue, 2 Dec 2008 04:19:39
Plain Text |
! Copyright (C) 2008 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: fry irc.client irc.client.private kernel namespaces
sequences threads io.encodings.8-bit io.launcher io splitting
make mason.common mason.updates calendar math alarms ;
IN: irc.gitbot

: bot-profile ( -- obj )
    "irc.freenode.org" 6667 "jackass" f <irc-profile> ;

: bot-channel ( -- seq ) "#concatenative" ;

GENERIC: handle-message ( msg -- )

M: object handle-message drop ;

: bot-loop ( chat -- )
    dup hear handle-message bot-loop ;

: start-bot ( -- chat )
    bot-profile <irc-client>
    [ connect-irc ]
    [
        [ bot-channel <irc-channel-chat> dup ] dip
        '[ _ [ _ attach-chat ] [ bot-loop ] bi ]
        "GitBot" spawn drop
    ] bi ;

: git-log ( from to -- lines )
    [
        "git-log" ,
        "--no-merges" ,
        "--pretty=format:%h %an: %s" ,
        ".." swap 3append ,
    ] { } make
    latin1 [ input-stream get lines ] with-process-reader ;

: updates ( from to -- lines )
    git-log reverse
    dup length 4 > [ 4 head "... and more" suffix ] when ;

: report-updates ( from to chat -- )
    [ updates ] dip
    [ 1 seconds sleep ] swap
    '[ _ speak ] interleave ;

: check-for-updates ( chat -- )
    [ git-id git-pull-cmd short-running-process git-id ] dip
    report-updates ;

: bot ( -- )
    start-bot
    '[ _ check-for-updates ] 5 minutes every ;

New Annotation

Summary:
Author:
Mode:
Body: