Skip to main content

conversation one

wallet address change

alt text

code no plugin

要实现这个功能,你可以使用 grammy 库来处理按钮交互和用户输入。以下是实现步骤和代码示例:

实现步骤

  1. 设置按钮:在消息中添加一个内联按钮,用于触发设置转出钱包的操作。
  2. 处理按钮回调:当用户点击按钮时,发送提示消息,要求用户输入收款钱包地址。
  3. 处理用户输入:接收用户输入的钱包地址,并进行验证或存储。

示例代码

import { Bot, InlineKeyboard } from "grammy";

const bot = new Bot("<your-bot-token>");

// 处理 /wallet 命令
bot.command("wallet", async (ctx) => {
const message = `
钱包地址: Gf8mzX...
钱包余额: 0 SOL
WSOL余额: 0 WSOL

🔗 邀请链接: https://t.me/GMGN_sol_bot?start=i_IL0eSqHJ
`;

const keyboard = new InlineKeyboard()
.text("设置转出钱包", "set_transfer_wallet")
.row()
.text("转换 WSOL → SOL", "convert_wsol_sol");

await ctx.reply(message, {
reply_markup: keyboard,
});
});

// 处理设置转出钱包按钮
bot.callbackQuery("set_transfer_wallet", async (ctx) => {
await ctx.reply("请输入收款钱包地址: ⚠️ 请仔细核对钱包地址(注意大小写),转错地址导致的资产损失,需要自行承担");

// 设置会话状态,等待用户输入地址
ctx.session.awaitingAddress = true;
});

// 处理用户输入
bot.on("message:text", async (ctx) => {
if (ctx.session.awaitingAddress) {
const address = ctx.message.text;
// 验证地址格式(可以根据具体需求实现)
if (isValidAddress(address)) {
// 存储地址或执行相关逻辑
await ctx.reply(`地址已设置为: ${address}`);
} else {
await ctx.reply("无效的钱包地址,请重新输入。");
}
// 重置会话状态
ctx.session.awaitingAddress = false;
}
});

// 验证地址格式的函数(简单示例)
function isValidAddress(address: string): boolean {
// 这里可以加入更复杂的验证逻辑
return address.length > 0;
}

// 启动机器人
bot.start();

说明

  • 内联按钮:使用 InlineKeyboard 创建按钮,并在回调中处理用户点击事件。
  • 状态管理:使用 ctx.session 来管理会话状态,跟踪用户是否正在输入钱包地址。
  • 地址验证:在接收用户输入后,验证钱包地址的格式。

确保根据实际需求完善地址验证和存储逻辑。

code with grammy-conversations

使用 grammy-conversations 可以更方便地管理对话状态。以下是如何实现该功能的示例代码:

实现步骤

  1. 设置按钮:在消息中添加一个内联按钮,用于触发设置转出钱包的操作。
  2. 使用对话:通过 grammy-conversations 来管理用户输入流程。
  3. 处理用户输入:接收用户输入的钱包地址,并进行验证或存储。

示例代码

import { Bot, InlineKeyboard } from "grammy";
import { conversations, createConversation } from "@grammyjs/conversations";

const bot = new Bot("<your-bot-token>");

// 注册对话插件
bot.use(conversations());

bot.command("wallet", async (ctx) => {
const message = `
钱包地址: Gf8mzX...
钱包余额: 0 SOL
WSOL余额: 0 WSOL

🔗 邀请链接: https://t.me/GMGN_sol_bot?start=i_IL0eSqHJ
`;

const keyboard = new InlineKeyboard()
.text("设置转出钱包", "set_transfer_wallet")
.row()
.text("转换 WSOL → SOL", "convert_wsol_sol");

await ctx.reply(message, {
reply_markup: keyboard,
});
});

// 创建设置转出钱包的对话
async function setTransferWalletConversation(conversation, ctx) {
await ctx.reply("请输入收款钱包地址: ⚠️ 请仔细核对钱包地址(注意大小写),转错地址导致的资产损失,需要自行承担");

const { message } = await conversation.waitFor("message:text");
const address = message.text;

if (isValidAddress(address)) {
await ctx.reply(`地址已设置为: ${address}`);
// 在此处存储地址或执行相关逻辑
} else {
await ctx.reply("无效的钱包地址,请重新输入。");
return await setTransferWalletConversation(conversation, ctx);
}
}

// 注册对话
bot.use(createConversation(setTransferWalletConversation));

// 处理设置转出钱包按钮
bot.callbackQuery("set_transfer_wallet", async (ctx) => {
await ctx.conversation.enter("setTransferWalletConversation");
});

// 验证地址格式的函数(简单示例)
function isValidAddress(address: string): boolean {
// 这里可以加入更复杂的验证逻辑
return address.length > 0;
}

// 启动机器人
bot.start();

说明

  • 对话插件:使用 grammy-conversations 插件来管理用户输入流程。
  • 对话函数:在 setTransferWalletConversation 函数中处理用户输入和验证。
  • 循环输入:如果输入无效,递归调用对话函数,要求用户重新输入。

根据实际需求,完善地址验证和存储逻辑。