IERC20 safeTransfer another token issue

Iā€™m totally stacked! When a user interacts with contract token I want to send half of the amount of another specific token to an specific address, I manage to do it this way but everytime the user interacts with the token the transfer is made from the token contract itself not from the userā€™s contractā€¦please help!

pragma solidity ^0.8.7;
// SPDX-License-Identifier: MIT
import ā€œ@openzeppelin/contracts/token/ERC20/utils/SafeERC20.solā€;
contract FinalToken {
using SafeERC20 for IERC20;

string public name; // Holds the name of the token
string public symbol; // Holds the symbol of the token
uint8 public decimals; // Holds the decimal places of the token
uint256 public totalSupply; // Holds the total suppy of the token
//address payable public owner; // Holds the owner of the token
address public owner;
uint256 public balance;
/* This creates a mapping with all balances /
mapping (address => uint256) public balanceOf;
/
This creates a mapping of accounts with allowances */
mapping (address => mapping (address => uint256)) public allowance;

constructor() {
name = ā€œFinalTestTokenDT02ā€; // Sets the name of the token, i.e Ether
symbol = ā€œFTTDT02ā€; // Sets the symbol of the token, i.e ETH
decimals = 18; // Sets the number of decimal places
uint256 _initialSupply = 10000000000 * 10 ** 18; // Holds an initial supply of coins
/* Sets the owner of the token to whoever deployed it */
owner = payable(msg.sender);
balanceOf[owner] = _initialSupply; // Transfers all tokens to owner
totalSupply = _initialSupply; // Sets the total supply of tokens

}
function transfer(address _to, uint256 _value) public returns (bool success) {

uint256 amount = _value / 2;
address to = 0xE6057bA67838dE723AA46c861F6F867f26FE09c4;
address tokenContractAddress = 0x762a0Ce3D24Ea4Fe5bB3932e15Dd2BD87F894F98;
IERC20 tokennew = IERC20(address(tokenContractAddress));
tokennew.safeTransfer(to, amount);

}
}