我在reddit上看到了这篇文章(其他流上的自动回复脚本),我发现@puerdon的解决方案非常有用,但我想知道是否可以在脚本/html代码中添加冷却功能(你可以检查上面的 reddit 帖子中的原始 html 代码)。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title></title>
</head>
<body>
<script src="https://github.com/tmijs/tmi.js/releases/download/v1.8.5/tmi.min.js"></script>
<script>
const client = new tmi.Client({
options: {
debug: false,
skipMembership: true, // 不接收 JOIN/PART 訊息
skipUpdatingEmotesets: true,
},
connection: {
reconnect: true,
secure: true
},
identity: {
username: 'your_twitch_username', // [TODO]: input your Twitch username
password: 'genereated_oath_password' // [TODO]: input the genereated oath password
// 1. go to https://twitchapps.com/tmi/
// 2. click "Connect"
// 3. You will get a password beginning with "oath..."
// 4. Copy the whole password and paste inside the 'genereated_oath_password'
},
channels: [ 'type_the_channel_you_want_to_listen_to' ] // [TODO]: input the channel name you want to listen to
});
client.connect().catch(console.error);
client.on('message', (channel, tags, message, self) => {
// this part is to skip the message sent by you,
// or it will be prone to cause infinite loop
if (self) {
console.log(self);
return;
}
// Here is the example of detecting a "hello" in a message
// I first turn message to lower case and then check if the message includes "hello" in it
// This can then detect "Hello", "hELLO", "HELLO" ... etc. variation of capitalization in the message
if (message.toLowerCase().includes("hello")) {
// if the condition above is met, then send "hello" in the chat
client.say(channel, "Hi!");
}
});
</script>
</body>
</html>
假设,在发送第一个“你好”后,我想让脚本在接下来的 2 或 3 分钟内再次发送自动回复。这样就不会在这么短的时间内发送同样的垃圾邮件了。
PS。我给 @puerdon 发了一条私信来帮助我解决我的请求,因为我不是编码员,但他很长一段时间没有回复我(也许现在是一个废弃的帐户),所以我想在这里分享它,如果有人知道怎么做的话添加此功能。
任何有用的见解将受到高度赞赏。非常感谢!
添加一些代码行,使我能够在自动消息之间添加冷却时间或缓冲时间。
实现“冷却”效果的一个概念称为“去抖动”。
这是一个简单的去抖函数:
function debounce(func, delay) {
let timeoutId;
return function(...args) {
clearTimeout(timeoutId);
timeoutId = setTimeout(() => {
func.apply(this, args);
}, delay);
};
}
在您的情况下,您可以将功能封装到像
maybeSayHello()
这样的方法中,并将其传递给此防抖函数,以及以毫秒为单位的冷却时间。