Giter VIP home page Giter VIP logo

Comments (7)

esindger avatar esindger commented on July 21, 2024

According to schema.tl the data parameter have to be a byte's array:

keyboardButtonCallback#683a5e46 text:string data:bytes = KeyboardButton;

and

updateBotCallbackQuery#e73547e1 flags:# query_id:long user_id:int peer:Peer msg_id:int chat_instance:long data:flags.0?bytes game_short_name:flags.1?string = Update;

So if you want to use a string for the data parameter, you have to convert string to bytes and back. I created an example how to extend updates context with convertStringToBytes and convertBytesToString.

from airgram.

volodalexey avatar volodalexey commented on July 21, 2024

Ok. Got it. I prefer to use these functions without context:

export function convertBytesToString(airgram: Airgram, bytes: number[]): string {
  const createDeserializer = airgram.container.get<ag.MtpDeserializerFactory>(TYPES.MtpDeserializerFactory);
  const data = createDeserializer(bytes)
  return data.fetchString()
}

export function convertStringToBytes(airgram: Airgram, str: string): number[] {
  const createSerializer = airgram.container.get<ag.MtpSerializerFactory>(TYPES.MtpSerializerFactory);
  const data = createSerializer();
  data.storeString(str)
  return arrayBufferToBytes(data.getBuffer())
}

It works! Thanks!

from airgram.

volodalexey avatar volodalexey commented on July 21, 2024

One more question.
As an airgram bot I need to notify user that callback was accepted/handled.
In Teleram bot API I have answerInlineQuery.
What request must I send to achieve the same result in airgram?

from airgram.

volodalexey avatar volodalexey commented on July 21, 2024

@esindger Can you help me in my question?

from airgram.

esindger avatar esindger commented on July 21, 2024

Method answerInlineQuery is not a part of schema.tl, this opportunity available only in the Bot API. Unfortunately, I couldn't find an analogue but in the docs of other mtproto client there is a mention of the method. You may try to send request Airgram.client.callApi<any, any>("answerInlineQuery", PARAMS). Probably it will work.

from airgram.

 avatar commented on July 21, 2024

It wont work because answerInlineQuery is not in the schema and can not be serialized.

from airgram.

volodalexey avatar volodalexey commented on July 21, 2024

Got it, thanks!
It's a pity... I was thinking to completely replace Telegram bot API with MTProto and your awesome library!

from airgram.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.