const { registerJoystreamTypes } = require('@joystream/types'); const { ApiPromise, WsProvider } = require('@polkadot/api'); const TelegramBot = require('node-telegram-bot-api'); // replace the value below with the Telegram token you receive from @BotFather const token = 'yourowntoken'; // Create a bot that uses 'polling' to fetch new updates const bot = new TelegramBot(token); //get chat id here https://stackoverflow.com/questions/32423837/telegram-bot-how-to-get-a-group-chat-id const chatid = 'yourownchat'; async function main () { registerJoystreamTypes() // Create the API and wait until ready const api = await ApiPromise.create({ provider: new WsProvider() }) var lastcouncilnotif = 0 const unsubscribe = await api.rpc.chain.subscribeNewHeads(async (header) => { const block = header.number.toNumber() console.log(`Current block ${block}`) if (block>lastcouncilnotif) { const councilround = await api.query.councilElection.round() const councilendterm = (await api.query.council.termEndsAt()).toNumber() const annperiod = (await api.query.councilElection.announcingPeriod()).toNumber() const votingperiod = (await api.query.councilElection.votingPeriod()).toNumber() const revealingperiod = (await api.query.councilElection.revealingPeriod()).toNumber() const councilstage = await getcouncilStage(api) const councilperiod = (await api.query.councilElection.newTermDuration()).toNumber() switch (councilstage){ case null: console.log('Council has been elected') if (block>lastcouncilnotif){ bot.sendMessage(chatid, ` New council for round ${councilround} has been elected at block ${councilendterm-councilperiod}.`, { parse_mode: 'html' }) lastcouncilnotif=councilendterm } break; default: const annstage = councilstage.Announcing const votingstage = councilstage.Voting const revealingstage = councilstage.Revealing if (annstage) { console.log('Announcing Stage') if (block>lastcouncilnotif){ bot.sendMessage(chatid, `New council election for round ${councilround} has been started at block ${annstage-annperiod}. You can apply now!`, { parse_mode: 'html' }) lastcouncilnotif=annstage } } if (votingstage) { console.log('Voting Stage') if (block>lastcouncilnotif){ bot.sendMessage(chatid, `Voting stage for council election has been started at block ${votingstage-votingperiod}. You can vote now!`, { parse_mode: 'html' }) lastcouncilnotif=votingstage } } if (revealingstage) { console.log('Revealing Stage') if (block>lastcouncilnotif){ bot.sendMessage(chatid, `Revealing stage for council election has been started at block ${revealingstage-revealingperiod}. Don't forget to reveal your vote!`, { parse_mode: 'html' }) lastcouncilnotif=revealingstage } } break; } } }) } const getcouncilStage = async (api) => { const councilstage = await api.query.councilElection.stage() const councilstagejson = councilstage.toJSON() return councilstagejson } main()