- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试为我 friend 的直播制作一个 Twitch 机器人,但在让它发送消息(或识别命令)时遇到一些问题。
我的代码:
import socket,string
HOST = "irc.twitch.tv"
PORT = 6667
NICK = "Axiom"
IDENT = "Axiom"
REALNAME = "Axiom"
CHANNEL = "#itwreckz"
PASSWORD = "oauth:PASSHERE"
readbuffer = ""
print "Connecting.."
t = socket.socket()
t.connect((HOST, PORT))
print "Connected! Logging in"
t.send("PASS %s\r\n" % PASSWORD)
t.send("NICK %s\r\n" % NICK)
t.send("USER %s %s BOT :%s\r\n" % (IDENT, HOST, REALNAME))
print "Logged in. Joining Channel"
t.send("JOIN %s\r\n" % CHANNEL)
print "JOINED!"
while 2>1:
readbuffer = readbuffer+t.recv(1024)
taco = string.split(readbuffer, "\n")
readbuffer = taco.pop()
for line in taco:
line=string.rstrip(line)
line=string.split(line)
if len(line) > 3:
print line
command = line
if "!test" in command:
print "If you see this, it recognizes command." #Doesn't show
t.send("PRIVMSG %s :IT WORKS!\r\n" % CHANNEL) #This either
if(line[0]=="PING"):
t.send("PONG %s\r\n" % line[1])
有谁知道我哪里可能搞砸了?
if len(line) >3:
有效,因为它显示聊天中发送的消息(仅当消息长度超过 3 个字符时)。所以我猜我已经把这些东西设置好了。它打印消息等。
我似乎无法让命令工作。
<小时/>编辑:这是一篇非常旧的帖子,但我想指出的是,我最终重新制作了整个 IRC 机器人,以便更好地工作。
对于任何可能感兴趣的人:
import socket,time
network = 'irc.example.net'
port = 6667
channels = ['#Channel1','#Channel2'] #Add as many as you want
nick = 'myIRCBot'
identify = True
password = 'superAwesomePassword'
irc = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
print "Connecting to "+network+" ..."
irc.connect ((network, port))
print "Changing nick to "+nick+"..."
irc.send ('NICK '+nick+'\r\n')
if identify == True:
print "Verifying password..."
irc.send("PASS %s\n" % (password))
print "Setting login data..."
irc.send ('USER '+nick+' '+nick+' '+nick+' :'+nick+' IRC\r\n')
time.sleep(1)
for channel in channels:
print "Joining "+channel+"..."
irc.send ('JOIN '+channel+'\r\n')
irc.send ('PRIVMSG '+channel+' :'+nick+' Started! Type .help for more\r\n')
time.sleep(1)
print nick+" bot started."
while True:
data = irc.recv(4096)
if data.find('PING') != -1:
irc.send('PONG '+data.split()[1]+'\r\n')
try:
user = data.split("!",1)[0].replace(":","",1)
vhost = data.split(" ",1)[0].split("!",1)[1]
dType = data.split(" ",1)[1].split(" ",1)[0]
chan = data.split(" ",1)[1].split(" ",1)[1].split(" ",1)[0]
msg = data.split(" ",1)[1].split(" ",1)[1].split(" ",1)[1].replace(":","",1).replace("\n","",1).replace("\r","",1)
if msg == '.help':
irc.send ('PRIVMSG '+chan+' :This is the only command!\r\n')
print user+" ("+vhost+") "+dType+" to "+chan+": "+msg
except:
pass
最佳答案
在 line=string.rstrip(line)
行,您将从行中删除尾随空格。在下一行,line=string.split(line)
,您将该行拆分为单词。之后,line
是消息中每个单词的列表。因此,事实上,当您检查 len(line) > 3
时,您正在检查该行是否包含三个以上的单词。
当您想从 IRC 消息中提取命令时,最简单(尽管不完全可靠)的方法是获取您现在拥有的单词列表的第一个元素,就像您在检查 if 时所做的那样行[0] ==“PING”
。在本例中,“PING”是命令。
现在,如果您指的不是 IRC 协议(protocol)命令,而是其他用户作为消息发送的命令,那就是另一回事了。所有收到的消息(私有(private)消息或 channel 消息)均遵循以下格式:
PRIVMSG <message target> :<message received>
因此,如果您正在查找来自其他用户的消息,其中收到的消息
部分中包含“!test”
。最有可能发生的情况是,当您string.split(line)
时,收到的消息
部分的第一个单词是":!test"
只是“!test”
。如果您只想完整保留整个 IRC privmsg 的消息部分,那么您真正需要做的是查找冒号并获取其后的所有内容,即
words = line.split()
if words[0] == "PRIVMSG":
message = line[line.find(":"):][1:]
message_words = message.split()
if "!test" in message_words:
print "If you see this, it recognizes the command"
行 message = line[line.find(":"):][1:]
有点困惑,但那里发生的只是我找到了第一次出现的":"
放在该行中,然后将冒号切掉。
关于python - Twitch IRC 机器人不发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24973559/
我的对话 fragment 有问题。我想使用 android:onClick 属性,因为在我看来代码更清晰。 在我的布局中,我有以下声明: 现在我的 DialogFragment import an
我正在制作一个使用谷歌地图的应用程序,我的主要 xml 代码 fragment 如下: 我的java代码是: import android.os.Bundle; import com.googl
是否可以在一个应用程序中有两个单独的首选项?我有一个在运行时连接到外部可执行文件(引擎)的应用程序。应用程序有自己的偏好,引擎也有。这两者不能混用,因为下次用户可能会决定加载具有不同偏好的完全不同的引
这是“Google Catalogs”应用程序的快照。我只是想知道我们如何进行这种图像重叠。![enter image description here][1] 最佳答案 您可以使用 FrameLay
我制作了一个 GridView ,其中添加了图像。但我的问题是它显示的 gridview 尺寸非常小,其中只有 3 张图像,就像图片中那样,我想在其中显示 9 张图像。 小号 但我希望 gridvie
我目前正在学习如何在 Android 上创建和使用服务。我查看了 android SDK 以获得进一步的帮助,我发现了 android:enable=[true |假]。 在SDK中是这样说的: Th
在完成我的 Android 游戏时,我希望用户将他/她的分数与高分进行比较。为此,我将当前的最高分存储在 SQLite 数据库中。但我认为我的方法(似乎可行)笨拙且丑陋: //in the final
出于某种原因,谷歌没有为模拟器提供任何通知声音,我找不到任何关于如何加载通知声音的引用。 我遇到过这个线程:How to play ringtone/alarm sound in Android但是除
我的应用有以下样式: true #ffffff true 它在我使用的大多数手机上运行良好。 (LG G5、Nexus 5、Moto G)但是当我在 LeEco Pro
我想确保我的网站阻止 Selenium 和 QTP 等自动化工具。有没有办法做到这一点 ?网站上的哪些设置会导致 Selenium 失败? 最佳答案 适当考虑对原始问题“你到底为什么要这样做?”的评论
我正在处理我的联系表,我希望它尽可能地防止垃圾邮件。我正在使用一些方法作为反击: 使用 JavaScript 正则表达式验证电子邮件的合法性 验证所有字段是否具有足够的值 制作一个不可见的字段来吸引机
It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, over
我正在制作一个 android 应用程序,我需要在我的应用程序中显示远程图像我使用以下代码。但图像未显示: for(int i=0;i
我有几个与 Android 操作系统中的 AIML 集成相关的问题。我对 Java 了解不多,但我对 AIML 了解很多。我制作了 AIML 文件,现在我想做的是制作一个可以加载文件并在 GUI 中运
我有一个具有“登录”和“注销”操作的应用程序。用户登录后,在他们注销时堆栈中可能还剩下任意数量的 Activity 。 当用户注销时,我希望重置所有应用程序状态。我清除了我的磁盘缓存和首选项,但在运行
我是 Android 应用程序开发的新手,我正在尝试开发一个可用的应用程序。但是我创建的这个页面自创建以来就出现了问题,我真的希望有人能帮助我解决这个问题。每次我运行这个程序时,应用程序都会关闭。 这
我尝试将 android:imeOptions 设置为 actionSend、actionSearch。但是键盘上没有“发送”或“搜索”按钮,只有普通的“Enter”键。我还尝试设置不同的输入类型。
我想创建一种方法来查看相机坐标的中心是否在某个区域的边界内,如果是,则执行一些操作。 当我尝试这样做时,出现错误:Operator !不能应用于 LatLngBounds。 我也试过 if(temp
我正在尝试将视频录制时长限制为 5 秒。我正在使用默认相机和此代码: intent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, 5); 现在它在三星 S6 上工
我正在开发一款安卓游戏 https://code.google.com/p/something-soft/我的日志猫说它正试图激发游戏的 Intent ,但随后主线程似乎死了(出现 ActivityN
我是一名优秀的程序员,十分优秀!