PircBot 未在 twitch 聊天中发送消息

Posted

技术标签:

【中文标题】PircBot 未在 twitch 聊天中发送消息【英文标题】:PircBot Not sending Message in twitch chat 【发布时间】:2014-05-19 15:15:33 【问题描述】:

您好,我目前正在为我的 twitch 流制作一个聊天机器人,但我遇到了一个问题,只有一个命令在工作,那就是 !song 命令所有其他命令由于某种原因无法工作我检查了我的代码,但我不能发现有什么问题

所以如果有人发现我的代码有什么问题,请告诉我

import org.jibble.pircbot.*;

import java.io.*;
import java.lang.System.*;

public class HyperBotZ extends PircBot 

// Get song title from Txt file AND return it!
public String getSong() throws Exception 
    FileReader file = new FileReader ("H:/Stream_Soft/Snip/Snip.txt");
    BufferedReader reader = new BufferedReader(file);

    String song = "";
    String line = reader.readLine();
    while (line != null)
        song += line;
        line = reader.readLine();
    

    return song;


// Write info to txt file

// IRC Commands_
public HyperBotZ() 
    this.setName("HyperBotZ");


public static String ip = "";
public static String dual = "";

public void onMessage(String channel, String sender,
                    String login, String hostname, String message) 

    String owner = "hypergainz";

    if (message.startsWith("!songrequest")) 
        sendMessage(channel, "Sorry i cant do that atm HyperGainZ need to learn me that, to see the current song use !song :D");
    

    if (message.startsWith("!ip ")) 
        if(sender.equals(owner))
        
            ip = message.split(" ")[1];
            sendMessage(channel, " the ip is set to " + ip);
         
     else 
        if (message.equalsIgnoreCase("!ip"))
            sendMessage(channel, "HyperGainZ is currently playing on : " + ip );
        
    

    if (message.startsWith("!dual ")) 
        if(sender.equals(owner))
        
            dual = message.split(" ")[1];
         
     else 
        if (message.equalsIgnoreCase("!dual"))
            sendMessage(channel, "http://multitwitch.tv/hypergainz/" + dual );
        
    

    if (message.equalsIgnoreCase("!song"))
        String song = "";
        try 
            song = getSong();
         catch (Exception e)  e.printStackTrace(); 
        sendMessage(channel, song);
    

【问题讨论】:

【参考方案1】:

首先,你应该移动你的

String owner = "hypergainz";

到类变量中,因为你不需要每次收到消息时都设置它。

接下来,一个好主意可能是将消息分解为字符串数组,以便您可以将命令与(可能的)参数分解。你可以这样做:

String[] messageArray = message.split(" ");

完成此操作后,您可以更轻松地比较邮件的第一部分。

如果您要使用几个命令(最多大约 10 个),我建议您使用开关来保持整洁。例如:

public void onMessage(String channel, String sender,
                String login, String hostname, String message) 

    String[] messageArray = message.split(" ");
    String command = messageArray[0];

    switch(command)

    default:break;

    case: "!songrequest":
        sendMessage(channel, "Sorry i cant do that atm HyperGainZ need to learn me that, to see the current song use !song :D");
        return;

    case "!song":
        String song = "";
        try 
            song = getSong();
         catch (Exception e)  e.printStackTrace(); 
        sendMessage(channel, song);
        return;

    

但是,如果您要制作(大型)实用程序机器人,创建自己的分发方法可能是个好主意,因为 onMessage(...) 方法很快就会被填满。

【讨论】:

ok id 照你说的做了,但唯一有效的命令是“!song”,这是我的代码:pastebin.com/vxzrRK2P 我刚刚测试了您的代码,它按预期工作...如果您想要的不仅仅是 !song 和 !songrequest 命令,则需要向开关添加命令。你期待什么输出? 它可以在普通的 irc 服务器上运行,但不能在 twitch 服务器上运行 您是否收到从服务器返回的任何错误消息?如果您将 PircBot 设置为详细模式,您应该会在终端中看到打印的所有交互 嗯,不确定。你能用工作消息和非工作消息的终端输出更新你原来的问题吗?

以上是关于PircBot 未在 twitch 聊天中发送消息的主要内容,如果未能解决你的问题,请参考以下文章

如何在 IRC 服务器中发送消息聊天?

Twitch IRC 聊天机器人成功连接但未检测到命令

如何使用 Python Twitch IRC Bot 获取聊天消息参数?

如何知道 twitch 流媒体是不是直播并发送相关消息?不和谐.py

Python 3.4 套接字未收到完整消息

连接到 twitch 聊天 python