Java Twitch IRC 机器人
Java Twitch IRC Bot
所以我正在为我的频道开发一个基本的 Twitch 机器人,代码如下:
Config.java
import java.io.IOException;
import org.jibble.pircbot.IrcException;
import org.jibble.pircbot.NickAlreadyInUseException;
public class Config {
private static final String OAUTH = "MYOAUTHHERE";
private static final String ADRESS = "irc.chat.twitch.tv.";
private static final int PORT = 6667;
private static final String channelName = "#MYCHANNELNAMEHERE";
public static void main(String[] args) throws NickAlreadyInUseException, IOException, IrcException {
TwitchBot bot = new TwitchBot();
bot.setVerbose(true);
bot.connect(ADRESS, PORT, OAUTH);
// bot.onMessage(channelName, "Bot", channelName, channelName, channelName);
System.out.println("Connected!");
bot.joinChannel(channelName);
System.out.println("Successfully joined channel!");
bot.sendMessage(channelName, "Hello, I am a bot");
}
}
TwitchBot.java
import org.jibble.pircbot.*;
public class TwitchBot extends PircBot {
private static final String channelName = "#MYCHANNELNAME";
private final String botName = "THEBOTNAME";
public TwitchBot() {
this.setName(botName);
this.setLogin(botName);
}
public String getchannelName() {
return channelName;
}
@Override
public void onMessage(String channel, String sender, String login, String hostname, String message) {
if (message.equalsIgnoreCase("time")) {
String time = new java.util.Date().toString();
sendMessage(channel, sender + ": The time is now " + time);
}
}
}
控制台显示 "Connected!" 和 "Successfully joined channel" 但是机器人没有响应,并且不在我指定的频道中。它也不会在聊天中打印 "Hello I am a bot"。
关于 Twitch,需要考虑的事情很少。
- 您的电子邮件必须经过验证。设置 -> 配置文件 -> 配置文件设置
- 频道名称必须以小写形式输入。
- 昵称没用,twitch 正在使用您的个人资料昵称。
- Twitch 使用 IRCv3 客户端能力协商 又名 CAP,这意味着您也应该使用它。
- 您应该只尝试进入现有频道,否则服务器将忽略您的 JOIN 频道。
- Twitch,让他们有机会在您登录时更改您的昵称,这意味着 TwitchBot class 提供的预期昵称结果可以,如果您提供的名称与您登录的个人资料昵称不同,则可能不正确。
Twitch IRC 功能,可以找到Here,这里有一些..
成员资格:加入、模式、名称、部分
标签:PRIVMSG 等'
您应该在登录后添加这些 CAP。
重要提示: PIRCBot,看起来不支持 twitch PRIVMSG 格式,这意味着 onMessage
回调不会被调用。这让您可以通过 handleLine
一般回调来处理接收到的消息的解析。
代码 已更新以适用于上述更改,您应该设置最终变量以使其正常工作。
TwitchBot.java
import org.jibble.pircbot.*;
public class TwitchBot extends PircBot {
private final String requestedNick;
private String realNick;
private String realServer;
public TwitchBot(String nick) {
this.requestedNick = nick;
setName(this.requestedNick);
setLogin(this.requestedNick);
}
@Override
protected void onConnect() {
super.onConnect();
System.out.println("Connected!");
// Sending special capabilities.
sendRawLine("CAP REQ :twitch.tv/membership");
sendRawLine("CAP REQ :twitch.tv/commands");
sendRawLine("CAP REQ :twitch.tv/tags");
}
@Override
protected void handleLine(String line) {
super.handleLine(line);
if (line.startsWith(":")) {
String[] recvLines = line.split(" ");
// First message is 001, extract logged in information.
if (recvLines[1].equals("001")) {
this.realServer = recvLines[0].substring(1);
this.realNick = recvLines[2];
System.out.println("realServer: " + this.realServer);
System.out.println("realNick: " + this.realNick);
}
}
}
@Override
protected void onJoin(String channel, String sender, String login, String hostname) {
super.onJoin(channel, sender, login, hostname);
if (sender.equals(this.realNick)){
System.out.println("Successfully joined: " + channel);
}
}
@Override
protected void onMessage(String channel, String sender, String login, String hostname, String message) {
if (message.equalsIgnoreCase("time")) {
String time = new java.util.Date().toString();
sendMessage(channel, sender + ": The time is now " + time);
}
}
}
goFile.java
import java.io.IOException;
import org.jibble.pircbot.IrcException;
import org.jibble.pircbot.NickAlreadyInUseException;
public class goFile {
private static final String OAUTH = "MYOAUTHHERE";
private static final String ADDRESS = "irc.twitch.tv.";
private static final int PORT = 6667;
private static final String Nick = "MYNICKHERE";
private static final String Channel = "#MYCHANNELHERE";
public static void main(String[] args) throws NickAlreadyInUseException, IOException, IrcException {
TwitchBot bot = new TwitchBot(Nick);
bot.setVerbose(true);
bot.connect(ADDRESS, PORT, OAUTH);
bot.joinChannel(Channel);
bot.sendMessage(Channel, "Hello, I am a bot");
}
}
所以我正在为我的频道开发一个基本的 Twitch 机器人,代码如下:
Config.java
import java.io.IOException;
import org.jibble.pircbot.IrcException;
import org.jibble.pircbot.NickAlreadyInUseException;
public class Config {
private static final String OAUTH = "MYOAUTHHERE";
private static final String ADRESS = "irc.chat.twitch.tv.";
private static final int PORT = 6667;
private static final String channelName = "#MYCHANNELNAMEHERE";
public static void main(String[] args) throws NickAlreadyInUseException, IOException, IrcException {
TwitchBot bot = new TwitchBot();
bot.setVerbose(true);
bot.connect(ADRESS, PORT, OAUTH);
// bot.onMessage(channelName, "Bot", channelName, channelName, channelName);
System.out.println("Connected!");
bot.joinChannel(channelName);
System.out.println("Successfully joined channel!");
bot.sendMessage(channelName, "Hello, I am a bot");
}
}
TwitchBot.java
import org.jibble.pircbot.*;
public class TwitchBot extends PircBot {
private static final String channelName = "#MYCHANNELNAME";
private final String botName = "THEBOTNAME";
public TwitchBot() {
this.setName(botName);
this.setLogin(botName);
}
public String getchannelName() {
return channelName;
}
@Override
public void onMessage(String channel, String sender, String login, String hostname, String message) {
if (message.equalsIgnoreCase("time")) {
String time = new java.util.Date().toString();
sendMessage(channel, sender + ": The time is now " + time);
}
}
}
控制台显示 "Connected!" 和 "Successfully joined channel" 但是机器人没有响应,并且不在我指定的频道中。它也不会在聊天中打印 "Hello I am a bot"。
关于 Twitch,需要考虑的事情很少。
- 您的电子邮件必须经过验证。设置 -> 配置文件 -> 配置文件设置
- 频道名称必须以小写形式输入。
- 昵称没用,twitch 正在使用您的个人资料昵称。
- Twitch 使用 IRCv3 客户端能力协商 又名 CAP,这意味着您也应该使用它。
- 您应该只尝试进入现有频道,否则服务器将忽略您的 JOIN 频道。
- Twitch,让他们有机会在您登录时更改您的昵称,这意味着 TwitchBot class 提供的预期昵称结果可以,如果您提供的名称与您登录的个人资料昵称不同,则可能不正确。
Twitch IRC 功能,可以找到Here,这里有一些..
成员资格:加入、模式、名称、部分
标签:PRIVMSG 等'
您应该在登录后添加这些 CAP。
重要提示: PIRCBot,看起来不支持 twitch PRIVMSG 格式,这意味着 onMessage
回调不会被调用。这让您可以通过 handleLine
一般回调来处理接收到的消息的解析。
代码 已更新以适用于上述更改,您应该设置最终变量以使其正常工作。
TwitchBot.java
import org.jibble.pircbot.*;
public class TwitchBot extends PircBot {
private final String requestedNick;
private String realNick;
private String realServer;
public TwitchBot(String nick) {
this.requestedNick = nick;
setName(this.requestedNick);
setLogin(this.requestedNick);
}
@Override
protected void onConnect() {
super.onConnect();
System.out.println("Connected!");
// Sending special capabilities.
sendRawLine("CAP REQ :twitch.tv/membership");
sendRawLine("CAP REQ :twitch.tv/commands");
sendRawLine("CAP REQ :twitch.tv/tags");
}
@Override
protected void handleLine(String line) {
super.handleLine(line);
if (line.startsWith(":")) {
String[] recvLines = line.split(" ");
// First message is 001, extract logged in information.
if (recvLines[1].equals("001")) {
this.realServer = recvLines[0].substring(1);
this.realNick = recvLines[2];
System.out.println("realServer: " + this.realServer);
System.out.println("realNick: " + this.realNick);
}
}
}
@Override
protected void onJoin(String channel, String sender, String login, String hostname) {
super.onJoin(channel, sender, login, hostname);
if (sender.equals(this.realNick)){
System.out.println("Successfully joined: " + channel);
}
}
@Override
protected void onMessage(String channel, String sender, String login, String hostname, String message) {
if (message.equalsIgnoreCase("time")) {
String time = new java.util.Date().toString();
sendMessage(channel, sender + ": The time is now " + time);
}
}
}
goFile.java
import java.io.IOException;
import org.jibble.pircbot.IrcException;
import org.jibble.pircbot.NickAlreadyInUseException;
public class goFile {
private static final String OAUTH = "MYOAUTHHERE";
private static final String ADDRESS = "irc.twitch.tv.";
private static final int PORT = 6667;
private static final String Nick = "MYNICKHERE";
private static final String Channel = "#MYCHANNELHERE";
public static void main(String[] args) throws NickAlreadyInUseException, IOException, IrcException {
TwitchBot bot = new TwitchBot(Nick);
bot.setVerbose(true);
bot.connect(ADDRESS, PORT, OAUTH);
bot.joinChannel(Channel);
bot.sendMessage(Channel, "Hello, I am a bot");
}
}