'How to implement a transaction fee on every transaction which will get rewarded to holders of the token?

I have tried to make a ERC20 token that takes a transaction fee on every transaction (buy/sell/transfer) and this transaction fee gets distributed amongst the holders of the coin depending on how many tokens they hold out of the total supply. I deployed it on Binance Smart Chain Testnet and provided liquidity on Pancakeswap Testnet. However, when I try to buy the token, I get this error:

The transaction cannot succeed due to error: undefined. This is probably an issue with one of the tokens you are swapping.

I can successfully sell the token but I can't buy it. Why is that? Thank you.

Here is my solidity code:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.2;

contract Token {

    mapping(address => uint) public balances;
    mapping(address => mapping(address => uint)) public allowance;

    uint public totalSupply = 100 * 10 ** 18;
    string public name = "Santa Doge";
    string public symbol = "SANTADOGE";
    uint public decimals = 18;

    event Transfer(address indexed from, address indexed to, uint value);
    event Approval(address indexed owner, address indexed spender, uint value);

    address admin;

    address charityWallet; //I put my wallets here but I deleted them for now
    address burnWallet;

    uint charityFee = 2;
    uint burnFee = 1;
    uint taxFee = 3;
    uint totalFee = 6;
    
    uint taxedCoins;

    constructor() {
        balances[msg.sender] = totalSupply;
        admin = msg.sender;
    }

    function balanceOf(address owner) public view returns(uint) {
        uint actualBalance = balances[owner] + ((balances[owner] * taxedCoins) / totalSupply);
        return actualBalance;
    }

/*
    function balanceOf(address owner) public view returns(uint) {
        return balances[owner];
    }
*/

    function transfer(address to, uint value) public returns(bool) {
        require(balanceOf(msg.sender) >= value, "Balance is too low");

        balances[charityWallet] += (charityFee * value) / 100;
        balances[burnWallet] += (burnFee * value) / 100;

        taxedCoins += (taxFee * value) / 100;

        balances[to] += (value * (100 - totalFee)) / 100;
        if (value <= balances[msg.sender]) {
            balances[msg.sender] -= value;
        } else {
            uint leftoverCoins = value - balances[msg.sender];
            balances[msg.sender] = 0;
            taxedCoins -= leftoverCoins;
        }
        
        emit Transfer(msg.sender, to, value);
        return true;
    }

    function transferFrom(address from, address to, uint value) public returns(bool) {
        require(balanceOf(from) >= value, "Balance is too low");
        require(allowance[from][msg.sender] >= value, "Allowance is too low");

        balances[charityWallet] += (charityFee * value) / 100;
        balances[burnWallet] += (burnFee * value) / 100;

        taxedCoins += (taxFee * value) / 100;

        balances[to] += (value * (100 - totalFee)) / 100;
        if (value <= balances[from]) {
            balances[from] -= value;
        } else {
            uint leftoverCoins = value - balances[from];
            balances[from] = 0;
            taxedCoins -= leftoverCoins;
        }
        
        emit Transfer(from, to, value);
        return true;
    }

    function approve(address spender, uint value) public returns(bool) {
        allowance[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);
        return true;
    }

    function getNumberOfTaxedCoins() public view returns(uint) {
        return taxedCoins;
    }

    function getTaxFee() public view returns(uint) {
        return taxFee;
    }

    function changeFees(uint charity, uint burn, uint tax) public {
        require(msg.sender == admin, "Only admin is allowed to change the fees");
        charityFee = charity;
        burnFee = burn;
        taxFee = tax;
        totalFee = charity + burn + tax;
    }

}


Solution 1:[1]

Adjust the Buy Slippage on Pancakeswap and retry. Note that the maximum Slippage is 49%

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 dayvvid