# Guide

![Nestgram](https://3560755491-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHts9egaBIQFAK8US18Eu%2Fuploads%2FLtR0f5Sx0ZRWGO7tZiKv%2Fnestgram-banner.jpeg?alt=media\&token=3bdb97c5-7388-4206-a62d-44af2194b787)

{% hint style="info" %}
You can read the guide here or on the [Medium](https://medium.com/p/ff251fb825fd)
{% endhint %}

## Install Nestgram

You need to install nestgram at first. You can do this using `yarn` or `npm`

```nginx
yarn add nestgram@1.9.0
// or
npm i nestgram@1.9.0
```

## Create main file

Our next step is creating the main file, so let's create the `main.ts` file

{% code title="main.ts" %}

```typescript
import { NestGram } from 'nestgram';
import { AppModule } from './app/app.module';

async function bootstrap(): Promise<void> {
  const bot = new NestGram('TOKEN', AppModule);
  await bot.start();
}

bootstrap();
```

{% endcode %}

At first, we imported nestgram and our AppModule, later we will create it. In the next step, we created a bootstrap function, in which we set up and run the project. The NestGram class gets bot token as 1st parameter (you can get it via [BotFather](https://t.me/BotFather)), app module as 2nd parameter, options as 3rd parameter, and [run config](https://degreetpro.gitbook.io/nestgram/config/webhooks-and-run-config) as 4th parameter

#### Nestgram class take arguments:

<table><thead><tr><th width="150" data-type="number">Argument</th><th>Name</th><th>Required</th></tr></thead><tbody><tr><td>1</td><td>Bot token. You can get it <a href="https://t.me/BotFather">here</a></td><td><strong>Required</strong></td></tr><tr><td>2</td><td><a href="#create-app.module.ts">App module</a></td><td><strong>Required</strong></td></tr><tr><td>3</td><td>Config. <a href="https://core.telegram.org/bots/api#getupdates">IPollingConfig</a> or <a href="https://core.telegram.org/bots/api#setwebhook">IWebhookConfig</a></td><td>Optional</td></tr><tr><td>4</td><td><a href="../config/webhooks-and-run-config#run-config">Run config</a></td><td>Optional</td></tr></tbody></table>

## Create app.module.ts

Let's create the `app.module.ts` file. In it, we will describe all available controllers and services

{% code title="app.module.ts" %}

```typescript
import { Module } from 'nestgram';
import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
  controllers: [AppController],
  services: [AppService],
})
export class AppModule {}
```

{% endcode %}

At first, we imported Module class from nestgram, AppController and AppService also, that we will create later. Then we described our controllers and services in @Module decorator

## Create app.controller.ts

Let's create the app.controller.ts file. In it, we will describe updates, that we want to handle

{% code title="app.controller.ts" %}

```typescript
import { OnCommand, Controller } from 'nestgram';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService?: AppService) {}

  @OnCommand('start')
  start(): string {
    return 'Hello, world!';
  }
}
```

{% endcode %}

We have created a controller where we describe an update when the user writes **/start**, and we handle it by sending a message "Hello, world!"

## Create app.service.ts

Let's create the app.service.ts file. In it, we will describe methods with working with db, that we will call in controller

{% code title="app.service.ts" %}

```typescript
import { Service } from 'nestgram';

@Service()
export class AppService {}
```

{% endcode %}

We can describe methods in AppService class, and call it in controller by `this.appService`

## Run project

To run the project, open a terminal in the project directory and type:

```nginx
npm run dev
```

Or build and run production:

```nginx
npm run build && npm run prod
```

## What's next?

Now you know about the syntax and structure of the Nestgram project, but if you want to write your own pro bot, you can check out the [Nestgram documentation](https://degreetpro.gitbook.io/nestgram/handling-updates/handling-commands)
