func SimulateMsgAddPostReaction(
	k keeper.Keeper, ak authkeeper.AccountKeeper, bk bankkeeper.Keeper,
) simtypes.Operation {
	return func(
		r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context,
		accs []simtypes.Account, chainID string,
	) (simtypes.OperationMsg, []simtypes.FutureOperation, error) {
		data, skip := randomAddPostReactionFields(r, ctx, accs, k, ak)
		if skip {
			return simtypes.NoOpMsg(types.RouterKey, types.ModuleName, "MsgAddPostReaction"), nil, nil
		}
		msg := types.NewMsgAddPostReaction(data.PostID, data.Shortcode, data.User.Address.String())
		err := sendMsgAddPostReaction(r, app, ak, bk, msg, ctx, chainID, []cryptotypes.PrivKey{data.User.PrivKey})
		if err != nil {
			return simtypes.NoOpMsg(types.RouterKey, types.ModuleName, "MsgAddPostReaction"), nil, err
		}
		return simtypes.NewOperationMsg(msg, true, "MsgAddPostReaction", nil), nil, nil
	}
}
---------------
--- PostReaction
---------------
SimulateMsgAddPostReaction tests and runs a single msg add reaction where the reacting user account already exists
nolint: funlen
package simulation
import (
	"math/rand"
	simappparams "github.com/cosmos/cosmos-sdk/simapp/params"
	simtypes "github.com/cosmos/cosmos-sdk/types/simulation"
	authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper"
	bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper"
	"github.com/cosmos/cosmos-sdk/baseapp"
	cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
	"github.com/cosmos/cosmos-sdk/simapp/helpers"
	sdk "github.com/cosmos/cosmos-sdk/types"
	"github.com/desmos-labs/desmos/v2/x/staging/posts/keeper"
	"github.com/desmos-labs/desmos/v2/x/staging/posts/types"
)