diff --git a/libraries/botbuilder/tests/teams/mentionsBot/.env b/libraries/botbuilder/tests/teams/mentionsBot/.env new file mode 100644 index 0000000000..a695b3bf05 --- /dev/null +++ b/libraries/botbuilder/tests/teams/mentionsBot/.env @@ -0,0 +1,2 @@ +MicrosoftAppId= +MicrosoftAppPassword= diff --git a/libraries/botbuilder/tests/teams/mentionsBot/package.json b/libraries/botbuilder/tests/teams/mentionsBot/package.json new file mode 100644 index 0000000000..f094cd00ae --- /dev/null +++ b/libraries/botbuilder/tests/teams/mentionsBot/package.json @@ -0,0 +1,30 @@ +{ + "name": "mentions-bot", + "version": "1.0.0", + "description": "", + "main": "./lib/index.js", + "scripts": { + "start": "tsc --build && node ./lib/index.js", + "build": "tsc --build", + "watch": "nodemon --watch ./src -e ts --exec \"npm run start\"" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "botbuilder": "file:../../../", + "dotenv": "^8.1.0", + "node-fetch": "^2.6.0", + "restify": "^8.4.0", + "uuid": "^3.3.3" + }, + "devDependencies": { + "@types/node": "^12.7.1", + "@types/node-fetch": "^2.5.0", + "@types/request": "^2.48.1", + "@types/restify": "^7.2.7", + "nodemon": "^1.19.1", + "ts-node": "^7.0.1", + "typescript": "^3.2.4" + } +} diff --git a/libraries/botbuilder/tests/teams/mentionsBot/src/index.ts b/libraries/botbuilder/tests/teams/mentionsBot/src/index.ts new file mode 100644 index 0000000000..9f8c08889f --- /dev/null +++ b/libraries/botbuilder/tests/teams/mentionsBot/src/index.ts @@ -0,0 +1,53 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +import { config } from 'dotenv'; +import * as path from 'path'; +import * as restify from 'restify'; + +// Import required bot services. +// See https://aka.ms/bot-services to learn more about the different parts of a bot. +import { BotFrameworkAdapter } from 'botbuilder'; + +// This bot's main dialog. +import { MentionsBot } from './mentionsBot'; + +const ENV_FILE = path.join(__dirname, '..', '.env'); +config({ path: ENV_FILE }); + +// Create HTTP server. +const server = restify.createServer(); +server.listen(process.env.port || process.env.PORT || 3978, () => { + console.log(`\n${server.name} listening to ${server.url}`); + console.log(`\nGet Bot Framework Emulator: https://aka.ms/botframework-emulator`); + console.log(`\nTo test your bot, see: https://aka.ms/debug-with-emulator`); +}); + +// Create adapter. +// See https://aka.ms/about-bot-adapter to learn more about adapters. +const adapter = new BotFrameworkAdapter({ + appId: process.env.MicrosoftAppId, + appPassword: process.env.MicrosoftAppPassword +}); + +// adapter.use(new TranscriptLoggerMiddleware(new FileTranscriptStore('./transcripts'))); + +// Catch-all for errors. +adapter.onTurnError = async (context, error) => { + // This check writes out errors to console log .vs. app insights. + console.error('[onTurnError]:'); + console.error(error); + // Send a message to the user + await context.sendActivity(`Oops. Something went wrong in the bot!\n ${error.message}`); +}; + +// Create the main dialog. +const myBot = new MentionsBot(); + +// Listen for incoming requests. +server.post('/api/messages', (req, res) => { + adapter.processActivity(req, res, async (context) => { + // Route to main dialog. + await myBot.run(context); + }); +}); diff --git a/libraries/botbuilder/tests/teams/mentionsBot/src/mentionsBot.ts b/libraries/botbuilder/tests/teams/mentionsBot/src/mentionsBot.ts new file mode 100644 index 0000000000..aef1ff2abd --- /dev/null +++ b/libraries/botbuilder/tests/teams/mentionsBot/src/mentionsBot.ts @@ -0,0 +1,32 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +import { + Mention, + MessageFactory, + TeamsActivityHandler, +} from 'botbuilder'; + +export class MentionsBot extends TeamsActivityHandler { + /* + * You can @mention the bot from any scope and it will reply with the mention. + */ + constructor() { + super(); + + // See https://aka.ms/about-bot-activity-message to learn more about the message and other activity types. + this.onMessage(async (context, next) => { + var mention = { mentioned: context.activity.from, text:`${context.activity.from.name}` }; + + // Against Teams having a Mention in the Entities but not including that + // mention Text in the Activity Text will result in a BadRequest. + var replyActivity = MessageFactory.text(`Hello ${mention.text}.`); + replyActivity.entities = [ mention ]; + + await context.sendActivity(replyActivity); + + // By calling next() you ensure that the next BotHandler is run. + await next(); + }); + } +} diff --git a/libraries/botbuilder/tests/teams/mentionsBot/teams-app-manifest/icon-color.png b/libraries/botbuilder/tests/teams/mentionsBot/teams-app-manifest/icon-color.png new file mode 100644 index 0000000000..bd9928dfc8 Binary files /dev/null and b/libraries/botbuilder/tests/teams/mentionsBot/teams-app-manifest/icon-color.png differ diff --git a/libraries/botbuilder/tests/teams/mentionsBot/teams-app-manifest/icon-outline.png b/libraries/botbuilder/tests/teams/mentionsBot/teams-app-manifest/icon-outline.png new file mode 100644 index 0000000000..45e7a7c56e Binary files /dev/null and b/libraries/botbuilder/tests/teams/mentionsBot/teams-app-manifest/icon-outline.png differ diff --git a/libraries/botbuilder/tests/teams/mentionsBot/teams-app-manifest/manifest.json b/libraries/botbuilder/tests/teams/mentionsBot/teams-app-manifest/manifest.json new file mode 100644 index 0000000000..ae3dc76169 --- /dev/null +++ b/libraries/botbuilder/tests/teams/mentionsBot/teams-app-manifest/manifest.json @@ -0,0 +1,43 @@ +{ + "$schema": "https://developer.microsoft.com/en-us/json-schemas/teams/v1.3/MicrosoftTeams.schema.json", + "manifestVersion": "1.3", + "version": "1.0.0", + "id": "<>", + "packageName": "com.teams.sample.mentionsbot", + "developer": { + "name": "MentionsBot", + "websiteUrl": "https://www.microsoft.com", + "privacyUrl": "https://www.teams.com/privacy", + "termsOfUseUrl": "https://www.teams.com/termsofuser" + }, + "icons": { + "color": "icon-color.png", + "outline": "icon-outline.png" + }, + "name": { + "short": "MentionsBot", + "full": "MentionsBot" + }, + "description": { + "short": "MentionsBot", + "full": "MentionsBot" + }, + "accentColor": "#FFFFFF", + "bots": [ + { + "botId": "<>", + "scopes": [ + "groupchat", + "team", + "personal" + ], + "supportsFiles": false, + "isNotificationOnly": false + } + ], + "permissions": [ + "identity", + "messageTeamMembers" + ], + "validDomains": [] +} \ No newline at end of file diff --git a/libraries/botbuilder/tests/teams/mentionsBot/tsconfig.json b/libraries/botbuilder/tests/teams/mentionsBot/tsconfig.json new file mode 100644 index 0000000000..a168d60662 --- /dev/null +++ b/libraries/botbuilder/tests/teams/mentionsBot/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "target": "es2016", + "module": "commonjs", + "composite": true, + "declaration": true, + "sourceMap": true, + "outDir": "./lib", + "rootDir": "./src", + } +} \ No newline at end of file