2010-12-09 2 views
0

node.js에 bot가 있으며 .tell 함수에 사용해야하는 로직이 무엇인지 궁금합니다. 이 기능의 목적은 오프라인 상태의 사용자에게 메시지를 보내는 것입니다. 따라서 john이 freenode.net/#foo에서 오프라인 상태 였고 .tell john your mother was great last night을 입력 한 경우 봇이이 메시지를 저장하고 john이 채널에 참여할 때마다 표시하도록합니다.내 IRC 로봇의 .tell (알림) 기능에 대한 내 논리가 맞습니까?

john이 이미 채널에있는 경우 봇에게 즉시 메시지를 표시하고 싶습니다.

정보를 저장하기 위해 데이터베이스로 이미 mongodb을 사용하고 있습니다. 따라서 모든 메시지를 저장할 수 있습니다. 여기에 지금까지 생각했던 논리는 다음과 같습니다 사용자 A 유형 .tell john your mother was great

1, 픽업 패턴 /\.tell ([\w-]+) (.*)/ 및 메시지에 대한 변수 (var msg 메시지를 게시 한 사용자를 저장할 리스너 (var from) ., 사용자의 이름 나는 또한 서버의 채널 이름과 네트워크를 의미하는 글로벌 변수가됩니다 (var to를) 메세지 수

2 내가 MongoDB를 등의 행을 저장할 수 있습니다. :

to from message     network  channel  delivered time 
-------------------------------------------------------------------------------- 
john meder your mother was great freenode.net #foobar  0   (TS) 
      last night 

3. 설정 봇이 네트워크에서 여러 채널에서 살고 감지 할 수 있기 때문에 채널에 가입 사람의 청취자 경우 전달되지 않고있을 경우, 시도가 일치하도록이 모든 메시지 tonetworkchannel을 저장된 메시지에 추가하고 행이있는 경우 표시합니다.

괜찮은 것 같지만 누구나 검토하고 조언을 제공 할 수 있습니까? 청취자가 어떤 채널로 들어오는 사람이라도 들어 줄 것을 강요 당할 것입니다. 그것에 대한 대안은 없습니까?

+0

, 대신 나는 채널을 의미 offline''의. 그들은 채널에 있어야합니다. –

답변

1

모두 괜찮아 보입니다. 네가 어떻게 청취자를 가질 수 없었는지 나는 모르겠다.

보봇 (Boe-Bot)에서 보류중인 메시지를 추적 할 수있는 해시를 추가하는 것이 좋습니다. 이렇게하면 누군가가 채널에 가입 할 때마다 MongoDB를 쿼리하지 않게됩니다.

e.e.

messages = {}; 
messages['freenode.net'] = {}; 
messages['freenode.net']['john'] = 1; 

이 과잉 될 수도 있지만 많은 조인이있는 채널을 모니터링하는 경우, 당신은 자신 MongoDB를 많이 쿼리를 찾을 수 있습니다.

내 두 센트. 사실

  • 기독교
관련 문제