- Reaction score
- 1,843
Github project page. (More up-to-date than the code below.)
This is the source code of the input generator bot for use with Twitch Plays Pokémon, where the user types in up, down, left, right, start, select, a, and b to control the protagonist.
I created this bot for the fun of it. Using Win32 API, I was able to focus on the web browser that is playing the livestream, and type in the accepted inputs into the chat. It does not require any Twitch API whatsoever, as it is all sent through the Windows operating system. In fact, there's no foul play that Twitch can detect.
Unless you tweak the Sleep() value or let others know, you will almost never be detected by others who may think you are a bot.
This is the source code of the input generator bot for use with Twitch Plays Pokémon, where the user types in up, down, left, right, start, select, a, and b to control the protagonist.
I created this bot for the fun of it. Using Win32 API, I was able to focus on the web browser that is playing the livestream, and type in the accepted inputs into the chat. It does not require any Twitch API whatsoever, as it is all sent through the Windows operating system. In fact, there's no foul play that Twitch can detect.
Unless you tweak the Sleep() value or let others know, you will almost never be detected by others who may think you are a bot.
Code:
#include <Windows.h>
#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>
//Converting chars to virtual codes
static HKL layout = GetKeyboardLayout(0);
void GenerateKey(int vk, bool extended){
KEYBDINPUT keyboard = {};
INPUT input = {};
//Key down
if (extended){
keyboard.dwFlags = KEYEVENTF_EXTENDEDKEY;
}
keyboard.wVk = vk;
input.type = INPUT_KEYBOARD;
input.ki = keyboard;
SendInput(1, &input, sizeof(input));
//Key up
keyboard = {};
input = {};
keyboard.dwFlags = KEYEVENTF_KEYUP;
if (extended){
keyboard.dwFlags |= KEYEVENTF_EXTENDEDKEY;
}
keyboard.wVk = vk;
input.type = INPUT_KEYBOARD;
input.ki = keyboard;
SendInput(1, &input, sizeof(input));
return;
}
void GenerateStrings(char* str, int size){
for (int i = 0; i < size; i++){
short vk = VkKeyScanEx(str[i], layout);
GenerateKey(vk, false);
}
GenerateKey(VK_RETURN, false);
}
void main(){
srand(time(0));
int r_old = -1, r;
while (true){
//*** PLEASE CHANGE THIS TO WHATEVER FAVORITE BROWSER YOU ARE USING.
//*** ALSO PLEASE MODIFY THE STRING VALUE IF THE TITLE OF YOUR TAB IS WRONG.
//HWND window = FindWindow(0, "TwitchPlaysPokemon - Twitch - Google Chrome");
//HWND window = FindWindow(0, "TwitchPlaysPokemon - Twitch - Mozilla Firefox");
HWND window = FindWindow(0, "TwitchPlaysPokemon - Twitch - Internet Explorer");
if (window){
SetForegroundWindow(window);
SetFocus(window);
}
r = rand() % 6;
if (r_old != r){
switch (r){
case 0:{
GenerateStrings("down", 4);
break;
}
case 1:{
GenerateStrings("up", 2);
break;
}
case 2:{
GenerateStrings("left", 4);
break;
}
case 3:{
GenerateStrings("right", 5);
break;
}
case 4:{
GenerateStrings("a", 1);
break;
}
case 5:{
GenerateStrings("b", 1);
break;
}
}
Sleep(5015);
}
r_old = r;
}
}
Last edited: