Skip to content

Instantly share code, notes, and snippets.

@Alan-Liang
Last active June 1, 2018 02:29
Show Gist options
  • Save Alan-Liang/4b5cf4988dbf08c5d26edcc7a2986697 to your computer and use it in GitHub Desktop.
Save Alan-Liang/4b5cf4988dbf08c5d26edcc7a2986697 to your computer and use it in GitHub Desktop.
Some strange integration between Telegram, Huginn and Wechat for Work

How to use

  1. create a bot.
  2. create an Webhook agent and add it to your bot.
  3. paste the code into a Javascript agent and recieve fron webhook.
  4. create two agents - one for sending messages to Telegram, another for Wechat.
  5. Link those stuffs and play with them,

Demo

here

Agent.receive = function() {
var self=this;
var NONE=0,
SETTING_TOKEN=1,
SETTING_ID=2,
SETTING_SECRET=3,
DOING_REQUEST=4,
SENDING_JSON=5,
SENDING_TEXTUID_1=6,
SENDING_TEXTUID_2=7,
SENDING_TEXTUID_3=8;
var sendText=function(chat,text){
//todo: sendText() and doWechat()
self.createEvent({text:text,id:chat.id});
};
var post=function(url,payload){
try{
self.log(JSON.parse(payload));
}catch(e){
self.log(e.stack);
}
self.createEvent({url:url,payload:payload});
};
var checkState=function(chat){
if(chat.state){
sendText(chat,"You are using another command now - Use /cancel to cancel.");
return true;
}
return false;
};
var doHelp=function(chat){
sendText(chat,self.credential("KMBotHelp"));
};
var events = this.incomingEvents();
for(var i = 0; i < events.length; i++) {
var evt=events[i].payload;
if(evt.message&&evt.message.text){
//text!
var text=evt.message.text.toString();
var chatId=evt.message.chat.id;
var chat=this.memory("chat/"+chatId)||evt.message.chat;
if(text.charAt(0)=='/'){
//command
switch(text){
case "/cancel":
if(!chat.state)
sendText(chat,"No command to cancel!");
else{
sendText(chat,"Command Canceled.");
chat.state=NONE;
}
break;
case "/settoken":
if(chat.state==SETTING_TOKEN)
break;
if(checkState(chat))
break;
sendText(chat,"Input your access token~");
chat.state=SETTING_TOKEN;
break;
case "/setid":
if(chat.state==SETTING_ID || checkState(chat))
break;
sendText(chat,"Input your corpid~");
chat.state=SETTING_ID;
break;
case "/setsecret":
if(chat.state==SETTING_SECRET || checkState(chat))
break;
sendText(chat,"Input your corpsecret~");
chat.state=SETTING_SECRET;
break;
case "/sendtext":
sendText(chat,"TODO");
break;
case "/sendjson":
if(chat.state==SENDING_JSON || checkState(chat))
break;
if(!chat.token){
sendText(chat,"Token not set!");
break;
}
sendText(chat,"Send me the JSON.");
chat.state=SENDING_JSON;
break;
case "/gettokenurl":
if(!(chat.cid&&chat.secret))
sendText(chat,"Config missing!");
else sendText(chat,"https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid="+chat.cid+"&corpsecret="+chat.secret);
break;
case "/sendtextuid":
if(checkState(chat))
break;
if(!chat.token){
sendText(chat,"Token not set!");
break;
}
sendText(chat,"Enter recieptant uid:");
chat.state=SENDING_TEXTUID_1;
break;
case "/":
case "/help":
default:
//todo:help
doHelp(chat);
}
}else{
switch(chat.state){
case SETTING_ID:
chat.cid=text;
sendText(chat,"Id saved.");
chat.state=NONE;
break;
case SETTING_SECRET:
chat.secret=text;
sendText(chat,"Secret saved.");
chat.state=NONE;
break;
case SETTING_TOKEN:
chat.token=text;
sendText(chat,"Token saved.");
chat.state=NONE;
break;
case DOING_REQUEST:
sendText(chat,"HOW DID YOU EVER DO THIS?");
chat.state=NONE;
break;
case SENDING_JSON:
if(!chat.token){
sendText(chat,"Token not set!");
break;
}
post("https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token="+chat.token,text);
break;
case SENDING_TEXTUID_1:
chat.uid=text;
sendText(chat,"Enter agentid.");
chat.state=SENDING_TEXTUID_2;
break;
case SENDING_TEXTUID_2:
chat.agentid=parseInt(text);
sendText(chat,"Now enter what to say.");
chat.state=SENDING_TEXTUID_3;
break;
case SENDING_TEXTUID_3:
var obj={ "touser" : chat.uid,
"msgtype" : "text",
"agentid" : chat.agentid,
"text" : { "content":text },
"safe":0
};
var payload=JSON.stringify(obj);
post("https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token="+chat.token,payload);
chat.state=NONE;
break;
case NONE:
default:
doHelp(chat);
}
}
this.memory("chat/"+chatId,chat);
}
//else nonsense
//this.createEvent({ 'message': 'I got an event!', 'event_was': events[i].payload });
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment