基本上我已经用 Python 制作了一个 IRC Twitch 机器人,它现在除了加入频道之外什么都不做。乒乓循环可以正常工作一段时间,但随后因标题中的错误而停止。我做错了什么?提前致谢。
import re
import socket
HOST = "irc.twitch.tv"
PORT = 6667
NICK = "asdsad"
PASS = "oauth:asdasdasdasd"
channel = "#coolperson"
def send_message(sock, msg):
sock.send("PRIVMSG #{} {}".format(channel, msg))
s = socket.socket()
s.connect((HOST, PORT))
s.send("PASS {}\r\n".format(PASS).encode("utf-8"))
s.send("NICK {}\r\n".format(NICK).encode("utf-8"))
s.send("JOIN {}\r\n".format(channel).encode("utf-8"))
while True:
response = s.recv(1024).decode("utf-8")
if response == "PING :tmi.twitch.tv\r\n":
s.send("PONG :tmi.twitch.tv\r\n".encode("utf-8"))
print("answered the call")
Run Code Online (Sandbox Code Playgroud) 这个问题似乎相当迂腐,但是在尝试遵循 RFC 时感觉相当重要。我正在尝试编写一个 IRC 客户端,并且我正在使用 RFC 来遵循应该如何编写协议。我遇到了消息前缀部分,对所写的内容有些困惑。
每个 IRC 消息最多可以由三个主要部分组成:前缀(可选)、命令和命令参数(其中最多可能有 15 个)。前缀、命令和所有参数由一个(或多个)ASCII 空格字符 (0x20) 分隔。
前缀的存在由单个前导 ASCII 冒号字符 (':', 0x3b) 指示,该字符必须是消息本身的第一个字符。冒号和前缀之间不能有间隙(空格)。
我的问题是关于第二段的第一句;ASCII colon character (':', 0x3b). (据我所知)0x3b是分号的 ASCII 字符,这是否意味着前缀可能是分号或冒号,或者它只是文档中的一个错字?我现在继续使用冒号,但是我的好奇心一直困扰着我。
我正在编写脚本remote.ini.脚本看起来像
on 1:start:{
server some.irc.server
server -m another.irc.server
}
Run Code Online (Sandbox Code Playgroud)
该脚本运行良好,因为当我打开mIRC时,它会自动连接到上面的2个服务器
现在,我想连接到需要密码的irc服务器 abcdef
如何编写脚本remote.ini以连接到此服务器?
我在拥有数百名用户的公共频道中运行我的机器人.昨天有人进来,只是滥用了它.
我想让任何人使用机器人,但如果他们连续发送垃圾邮件命令,并且如果他们不是像我这样的机器人"所有者",那么我想将它们添加到一个被忽略的列表中,该列表在一小时左右到期.
我想的一种方法是在所有用户中保存所有命令,例如:
({
'meder@freenode': [{command:'.weather 20851', timestamp: 209323023 }],
'jack@efnet': [{command:'.seen john' }]
})
Run Code Online (Sandbox Code Playgroud)
我会设置一个cron作业来每24小时刷新一次,但我基本上会确定一个人是否在15秒的持续时间内发出了X个命令并将它们添加到忽略列表中.
实际上,当我写这个答案时,我想到了一个更好的想法..也许不是存储每个用户命令,只是将机器人的命令存储在列表中并继续推动直到它达到15的限制.
lastCommands = [], limit = 5;
function handleCommand( timeObj, action ) {
if ( lastCommands.length < limit ) {
action();
} else {
// enumerate through lastCommands and compare the timestamps of all 5 commands
// if the user is the same for all 5 commands, and...
// if the timestamps are all within the vicinity of 20 seconds
// add the user …Run Code Online (Sandbox Code Playgroud) 我有一个使用Twisted框架编写的Python Bot,我有一个输出某些文本的C程序.我怎样才能运行Twisted使用命令运行C程序,收集输出,然后将输出打印回给我?
所以我在小型应用程序中使用多线程.在这里创建一个新线程,一个新线程.
我目前正在开发一个监控IRC聊天的程序.对于每个有效的命令,它创建一个线程,做一些工作,并将结果输出到聊天.有时,应用程序将在短时间内获得10个或更多有效命令,并创建10个或更多线程.应用程序开始变慢.我已经读过创建和关闭线程的资源效率非常低,所以我想改变我的方法.
我有一个想法是创建一些线程(大约5个左右?),这些线程总是运行一个方法,我将命令传递给它,以FIFO为基础对它们进行排队.在我实现之前,我想看看是否有更好的东西我应该使用.当然,我不想逃跑并重新发明轮子.
我正在使用我的IRC Bot for Twitch.tv(pircbot API),并希望在流媒体上线后,机器人自动连接到流的聊天.
我找到了一个Twitch API(这里),但我不知道如何将它实现到我的机器人中,因为我对Java很新.
如果有人可以告诉我如何在线流在线时如何检索任何提示,以及我如何检查现在观看的观众数量,那将会很酷.
问候
或者更具体地说.Ascii控制字符.^C,0x03或STX.我试图让我的程序在IRC中发送颜色代码(我知道这没有真正的标准),但我至少需要一个小时的研究,我不知道还有什么可以搜索.我在VS 2010的选项中看不到任何内容.
我需要让VS停止愚蠢,让我在文本编辑器中输入STX或ETX字符.我已经在save中尝试了编码.有什么想法或想法吗?
使用using (NetworkStream stream = client.GetStream())使套接字关闭.