RFC 2810对于一对一通信有以下规定:
一对一的通信通常由客户端执行,
因为大多数服务器到服务器的流量并不是服务器
仅相互通信的结果。为了给客户端提供一种相互通信的方式
,要求所有服务器都能够
沿着生成树向一个方向发送消息,以便到达任何
客户端。因此,消息传递的路径是
生成树上任意两点之间的最短路径。
(强调我的。)
这个“一个方向”是什么意思呢?只针对一位客户?它如何“到达任何客户端”并找到“任意两点[IRC网络上的主机]之间的最短路径”?
为什么不直接存储客户端的 IP 地址并让 IP 完成其工作呢?毕竟,IRC 是建立在 TCP/ IP之上的。
我正在用Python写一个IRC机器人,由于它的alpha性质,它可能会出现意外错误并退出.
我可以用什么技术让程序再次运行?
我试图编写一个程序,在某些端口(比如tcp 6666)上监听数据(简单文本消息),然后将它们传递给一个或多个不同的协议 - irc,xmpp等等.我已经尝试了很多方法并挖掘了互联网,但我找不到容易和有效的解决方案来完成这样的任务.
我目前正在与之斗争的代码是:http://pastebin.com/ri7caXih
我想知道如何从对象:
ircf = ircFactory('asdfasdf','#asdf666')
获得访问自协议方法,因为这:
self.protocol.dupa1(MSG)
返回有关self未传递给活动协议对象的错误.或者也许还有其他的,更好的,更简单的,更犹豫的方式来创建具有多个协议的单个反应器,并且当消息到达其中任何一个时具有动作触发器,然后将该消息传递给其他协议以进行处理/处理/发送?
任何帮助将非常感谢!
终于找到了我大约10年前为IRC Bot编写的一些非常古老的脚本.我不知道我在做什么,并想知道是否有人知道这是什么写的和任何信息?
on *:sockread:$1:{
var %stattype $1
if ($sockerr) {
.notice [ %nickname [ $+ [ %stattype ] ] ] Error.
halt
}
else {
var %statread
sockread %statread
if (Stat:* * * * iswm %statread) {
.tokenize 32 %statread
.notice [ %nickname [ $+ [ %stattype ] ] ] 1[ Username:7 $upper( [ %username [ $+ [ %stattype ] ] ] ) 1] [ Skill: 7 $upper(%stattype) 1]
.notice [ %nickname [ $+ [ %stattype ] ] ] 1[ …Run Code Online (Sandbox Code Playgroud) 所以我的问题是,如果有一个PING,我怎么能让我的机器人听,如果在一分钟的间隔内没有ping,它会像连接丢失一样做出反应.怎么会这样做呢?
编辑:
这是用于注册连接余量的工作代码(尽管重新连接时遇到问题):
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import socket
import string
import os
import platform
import time
# Variables
HOST = "irc.channel.net"
PORT = 6667
NICK = "Botname"
IDENT = "Botname"
REALNAME = os.getenv('USER')
CHAN = "##ChannelName"
readbuffer = ""
# Our IRC connection
irc = socket.socket()
irc.settimeout(300)
connected = False
def connection(host, port, nick, ident, realname, chan):
while connected is False:
try:
irc.connect((host, port))
irc.send("NICK %s\r\n" % nick)
irc.send("USER %s %s bla :%s\r\n" % …Run Code Online (Sandbox Code Playgroud) 在IRC DCC通信中,为了启动连接,您必须向另一个人提供IP地址和端口.但是,您如何在IPv6世界中处理这个问题?
我正在用Java编写机器人的IRC框架部分,所以我需要能够处理各种情况.似乎没有一种标准的方法来处理这个问题
我通过IPv6对现有客户进行了一些测试(两个Teredo客户端通过Ipv6连接到freenode
我知道DCC协议有一些扩展,以人类可读的格式发送IP地址,但这些扩展不是标准的,也不是广泛支持的.发送0似乎不是我的机器人未来证明的合适方式.
现在我正在将IPv6地址转换为BigInteger,但另一方面弄清楚BigInteger是IPv4还是IPv6地址是不是让我感到困惑(我后来问这个怎么做).
TL; DR:在IPv6环境中处理DCC的适当方法是什么?我应该发送0,我是否应该发送任何内容并在机器人中引发其不受支持的异常,或者我应该发送怪物BigInteger?
我正在制作一个python irc审核机器人.其中一个功能是报告.
因此,它是多个单词,因此当机器人输出报告时,它显示为
Report from aletheia Offender: codefreak Channel: #admin Reason: ['test', 'report']
Run Code Online (Sandbox Code Playgroud)
如何格式化原因(在代码中写为行[6:].(行中的第6个参数))所以它显示为一个字符串而不是数组?
我正在尝试制作一个IRC机器人,但它会在240秒后保持超时.我怎样才能解决这个问题?
import socket
host = 'test'
port = 6667
channel = '#test'
nick = "test"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
s.send('NICK ' + str(nick) + ' \n\r')
s.send('USER v v v :v Script' + '\r\n')
s.send('JOIN '+channel+' \n\r')
while True:
command = s.recv(4096)
print command
Run Code Online (Sandbox Code Playgroud) 比方说,我们有一个IRC #ChannelName在irc.server.com这里人们可以自由地从机器人下载文件,通过如命令/msg BotName xdcc send #123,我们要下载一个这样的文件到我们/download/dir.如何在简单的wget/curl-like命令中执行此操作?
它可能不止一个命令或一个脚本,但请记住,我想将它封装到一个脚本中,这样我就可以输入一些内容.
irc-download.sh irc.server.com ChannelName BotName 123 /download/dir
Run Code Online (Sandbox Code Playgroud)
然后等待一段时间,然后获取文件,就像下载wget一样.
解决方案中的好东西: