tmijs libraryのチャットイベントを聞いて、!overlay
チャットでコードを実行したい。私はそのメッセージを取得するときに達成したいことは次のとおりです。Expressを使用してPUTルート後にコードが実行されない
- ユーザーがユーザー
- トリガソケットイベントからの私の反応のアプリ に十分な通貨
- 控除の通貨を持っている場合、ユーザー
- チェックを取得します
最後の箇条書きまではすべてがうまくいくようです。私の端末では、私のユーザが通貨(私のコードでは「kluiten」と呼ばれる)を差し引いていることが示されていますが、それ以降のすべてのコードは実行されません。
require('dotenv').config();
const PORT = process.env.PORT || 9000;
class TwitchAPI {
constructor({io}) {
this.io = io;
this.client = new tmi.client(options);
this.client.connect();
this.handleOverlayRequest = this.handleOverlayRequest.bind(this);
this.handleChatMessage = this.handleChatMessage.bind(this);
this.client.on('chat', this.handleChatMessage);
}
handleChatMessage (channel, userstate, message) {
if(message === '!overlay') this.handleOverlayRequest(channel, userstate);
}
async handleOverlayRequest (channel, userstate) {
const requiredKluiten = 5;
const rawFoundUser = await fetch(`http://localhost:${PORT}/api/users/${userstate.username}`);
const foundUser = await rawFoundUser.json();
if(foundUser.instakluiten >= requiredKluiten) {
this.client.action(channel, `${userstate[`display-name`]}, you've got enough instakluiten for this.`);
const method = `PUT`;
const payload = { 'requiredKluiten': requiredKluiten };
const body = JSON.stringify(payload);
const headers = { 'Content-Type': `application/json; charset=utf-8` };
const result = await fetch(`http://localhost:${PORT}/api/users/${userstate.username}/decrementKluiten`, { method, body, headers });
console.log(result);
}
}
}
module.exports = TwitchAPI;
私は、Expressルータがあります。
const express = require('express');
const userController = require('../controllers/userController');
const router = express.Router();
router.route('/users/:username/decrementKluiten').put(userController.decrementKluiten);
router.route('/users/:username').get(userController.getUser);
router.route('/overview').get(userController.getOverview);
module.exports = router;
通貨が差し引かれますを確認します。私が今立ち往生しているのは、すべてのことが起こった後、フェッチした後でもうコードを実行できないということです。私は私が私のルートで約束を解決することによって、コードを実行することができることかかわらたが、それは本当に汚い感じていると私の分割ファイルを台無しに:
router.route('/users/:username/decrementKluiten').put((req, res) => {
userController.decrementKluiten(req, res).then(x => {
console.log(x);
});
});
起こると、まだ実行するために私のPUTを待つ方法はありますコードはそれの後に?これは私だけにしようと多くのコードは、この記事の関連部分を含んで含まれているため
userController.js
const {findChattersPerRole, getUserByUsername, decrementKluiten} = require('../actions');
const find = require(`lodash/find`);
const fetch = require(`isomorphic-fetch`);
const parseJSON = response => response.json();
module.exports = {
getUser: (req, res) => {
const username = req.params.username;
findChattersPerRole()
.then(chattersPerRole => {
const wantedUser = find(chattersPerRole, { username });
getUserByUsername(wantedUser.username)
.then(foundUser => {
if (foundUser) {
res.send(foundUser);
} else {
res.send(`No user has been found`);
}
});
});
},
getOverview: (req, res) => {
fetch(`https://tmi.twitch.tv/group/user/instak/chatters`)
.then(parseJSON)
.then(r => {
return res.json(r);
}).catch(err => {
console.log(err);
});
},
decrementKluiten: (req, res) => {
decrementKluiten(req.params.username, req.body.requiredKluiten);
}
}
EDITは
(をactions.js、データベース呼び出しはSequelize.jsを使用して行われます。)
const decrementKluiten = (username, requiredKluiten) => {
return global.db.Viewer.findOne({
where: { username }
}).then(user => {
return user.decrement({ instakluiten: requiredKluiten });
});
};
module.exports = {
decrementKluiten
};
は素晴らしいことです。 – Svenskunganka
@Svenskunganka最も関連性の高い部分を追加しました。 'userController.js'ファイル、エクスポート' decrementKluiten'方法で – Kevin
、あなたは 'decrementKluiten(req.params.username、req.body.requiredKluiten).then(()=> res.sendStatus(とそのコードを交換する場合200))。catch(()=> res.sendStatus(500)) 'のように動作しますか?私はおそらくこれについてチャットを開くことができるのだろうかと思っています。デバッグをしなければならないかもしれないと思っています。 – Svenskunganka